Pandas - DataFrame类型的对象 - 2. 相关属性
相关属性
- index
- columns
- values
- shape
- ndim
- dtypes
说明:
- 可以通过index访问行索引,columns访问列索引,values访问数据,其中index与columns也可以进行设置(修改)。
- 可以为DataFrame的index与columns属性指定name属性值。
- DataFrame的数据不能超过二维。
# df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], index=["a", "b"], columns=["e", "f", "g"])
# index 返回DataFrame的行索引。
# df.index
# 修改行索引。
# df.index = ["a1", "b1"]
# columns 返回DataFrame的列索引。
# df.columns = ["e1", "f1", "g1"]
# 我们也可以自己先创建Index对象(也可以指定name属性)。
row_index = pd.Index(["a", "b"], name="行索引")
col_index = pd.Index(["e", "f", "g"], name="列索引")
df = pd.DataFrame([[1, 2, 3], [4, 5.3, 6]], index=row_index, columns=col_index)
# df
# values 返回DataFrame所关联的ndarray数组。
# df.values
# shape 返回DataFrame的形状。也就是返回DataFrame所关联的ndarray数组的形状。df.values.shape
# df.shape
# ndim 返回DataFrame维度数。
# df.ndim
# dtypes 返回DataFrame中每一列的数据类型。
# DataFrame与ndarray在数据类型上的体现是不同的。对于ndarray,数组中所有元素的类型都是相同的(整个数组只有一种类型)。如果
# 数组中元素类型不一致,则会找出一种最兼容的类型,来作为ndarray数组的总体类型。对于DataFrame,每个列都可以具有不同的数据类型,
# 这点类似于数据库中的数据表。
# display(df.dtypes)
# display(df)
# DataFrame的数据结构不能超过2维。
# 错误。
# df = pd.DataFrame(np.ones(shape=(3, 3, 3)))
1. index
获得,修改DataFrame的行索引,
没有指定,现在是2行。
现在指定a b,
注意:因为不是数值类型了,而是index object类型。
修改行索引
2. Columns
修改列索引
3. 指定 改变 用变量形式
pd.Index 大写
4. 设索引名称,加Name
5. Values
返回DataFrame所关联的ndarray数组
6. Shape
返回DataFrame所关联的数组的形状,
形状,要注意:
意义不在于表面上的形状,
真正的意义在于获得每个维度的长度。
因为shape返回的是一个元组,从高维到低维,每个维度的长度,
知道有多少行,多少列。
Df.shape[0] df.shape[1] 行数,列数
7. Ndim
返回DataFrame维度数,
没什么意思,因为DataFrame就是二维的。
8. Dtypes
Df每一列可以是不同类型
对于ndarray而言,我们元素类型必须是相同的,
即使不同,也会兼容 选一种作为总体。
而DataFrame 列里面必须相同 列与列之间可以不同。
如果说数组中元素类型不一致,比如float int,
Ndarray会找到一种最兼容的类型,来作为ndarray数组的总体类型,
而对于DataFrame,某一列内的数据类型要求一样,但列之间不要求一样,
这一点类似于数据库中的数据表 table 每一个字段里面要求相同。
9. Ndarray为什么数据类型必须一致?
因为采用紧凑式存储,
要想访问第n个元素,先定位地址,
如何定位,
起始地址+ n * 单个元素的长度。
如果每个元素的长度不一样,就不能快速定位,
Ndarray要求快。
DataFrame为什么可以不一样?
字典是以键值对储存,完全不需要挨在一起,
键值对,绑定。
他们两个根本就是不用的键值对,所以不要求一直,
这一列里面要求一直。
5.3 意味着 2 要变成2.0
10. DataFrame能为3维的吗?
不能