Pandas数据结构
DataFrame
可以看作包含两个Index类(index、columns)、一个二维ndarray类 (values)
- 二维values + 结构化index + 结构化columns
- values自己还有两根只能使用integer indice的轴
- 结构同数据库表相似:列为属性,行为个体
1 | DF = pd.DataFrame( |
DF行列逻辑
可以通过DF = df1.T
作转制更改行列逻辑
获取数据
列优先
1 | Ser = df1[col_name] |
行优先
.loc[]
行优先,逻辑和df1[]列优先类似
1 | Ser = df.loc[index_name] |
.iloc[]
indices locate,应视为对value(ndarray)进行操作,index和 columns的结构对其没有任何影响
- 在层级索引情况下,仍然返回Ser
1 | Ser = df1.iloc[indice] |
.ix[]
.loc
、.iloc
的封装,不建议使用
- 优先使用
.loc
,除非参数为int、且Index不是int类型
1 | Ser = df1.ix[index] |
行优先快速版本
只能、必须取一个值
- 不能用于获取切片
对于多重索引必须将Index、Columns所有level全部指定
.iat
1
Val = df1.iat[index_indice, col_indice]
.at
1
2
3
4Val = df1.at[index_name, col_name]
# 单索引
Val = df1.at[(index_level_0, index_level_1,...), (col_level_0, col_level_1,...)]
# 多重索引必须指定全部level保证只取到一个值
切片
Values切片
切片对象是values
1 | DF = df1.iloc[irow_start: irow_end, icol_start: icol_end] |
Index切片
切片对象是index,包括上限
全切片
1 | DF = df1.loc[ |
行切片
1 | DF = df1.loc[[(index_0, index_1,...),...]] |
列切片
1 | DF = df1[[col_name,...]] |
DF数据共享逻辑
DF数据(values)共享的逻辑
- 一般尽量共享数据,直至无法处理(数据同时增加/删除行、列)
- 有些方法会有
copy
参数,可以显式控制是否拷贝副本- 如
.reindex
默认拷贝副本
- 如
1 | df1_T = df1.T |
Index 索引
使用integer作为index时注意df1.ix[]的逻辑
MultiIndex 层级索引
层级索引允许以低维度形式表示高纬度数据
- 层级索引可以使用tuple形式表示:
(level_0, level_1,...)
- 需要注意区分和tuple本身作为index
- 打印时可以tuple有括号,而层级索引没有
- 层级索引有时可以省略括号
- 需要注意区分和tuple本身作为index
from_arrays
1 | Index = pd.MultiIndex.from_arrays( |
说明:将arrays转换为MultiIndex
参数
arrays
:包含多个list作为各个level索引- 各list按照传递顺序决定level
- 不会自动合并不连续labels(否则需要交换数据位置)
sortorder
:sortedness级别?names
:level名
from_tuples
1 | Index = pd.MultiIndex.from_tuples( |
说明:将
tuples
转换为MultiIndex参数
tuples
:每个tuple为一个index,按照tuple中元素顺序 决定各元素level
from_product
1 | Index = pd.MultiIndex.from_product( |
- 说明:对
iterables
元素作product(积)作为MultiIndex
Series:可以看作是包含一个Index类(index,存放标签)、一个一维ndarray类(values,存放数据)
a. ser=pd.Series(data=np.darray/dict, index=list)
b. Series对象可以处理标签不一致的数据,但是只有标签的交集才能得到有意义的结果,其余为NaN
c. 其余性质类似于DataFrame对象
Index属性#todo
a. index属性
df1.columns=[]:更改列名称,index同
df1.columns.names=[]:更改列名,index同
pandas库中的其他一些问题
a. 数据类型转换:Series对象和DF对象在运算过程中dtype类型可能发生”无意义”的转换
dtype=i8的对象之间的+、-结果为dtype=f8类型的对象(当然这个可能是保持和\的一致性)
SeriesObj.reindex(new_index)会”可能”会改变原有数据类型(由i8->f8)(有增加新index时)