索引与分层索引
接下来会用到的数据:
链接:https://pan.baidu.com/s/1RAqFCxWcl4OEChlRtSBooA
提取码:612s
索引
- 查看索引:df.index
1 | import pandas as pd |
- 指定索引:df.index = [,] 个数必须一致否则error
1 | import pandas as pd |
1 | 0 1 |
- 重置索引:df.reindex([,]) 无需个数一致
1 | import pandas as pd |
1 | 0 1 |
- 指定某一列作为index:df.set_index(“M”,drop=False) drop表示是否删除原M列
1 | import pandas as pd |
1 | M N |
- 返回index的唯一值:df.set_index(“M”).index.unique()
- df.reset_index():将分层索引层级移动到列中
1 | import pandas as pd |
1 | N |
分层索引
分层索引是Pandas一个重要的特性,允许在一个轴上拥有多个所以层级。
1 | import pandas as pd |
1 | a b c d |
数据合并
数据合并也就是说将多个数据集拼接在一起,但是合并的方式主要分为:pandas.merge,pandas.concat,df.join。以下,我们来详细的介绍。
merge()
基于列进行关联,是最常用的一种方法。函数为:
1 | pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, |
- left:拼接左侧的DataFrame对象;
- right:拼接右侧的DataFrame对象;
- on:待关联的同名列名,存在于左右两个DataFrame对象中;
- how:连接方式,inner(默认),其他可选:outer、left、right ;左右连接 交集并集
- left_on:左侧DataFarme中用作连接键的列名;
- right_on:右侧DataFarme中用作连接键的列;
- left_index:将左侧的行索引用作其连接键;
- right_index:将右侧的行索引用作其连接键;
1 | import pandas as pd |
- 左连接
1 | sites AQI PM25 SO2 |
- 内连接
1 | sites AQI PM25 SO2 names regions weather |
- 外连接
1 | sites AQI_x PM25_x SO2_x AQI_y PM25_y SO2_y |
- 使用重复键进行连接
1 | import pandas as pd |
1 | sites date AQI |
1 | import pandas as pd |
1 | sites date AQI |
join()
join方法是基于index连接dataframe。join连接方法有内连接,外连接,左连接和右连接,与merge一致。
1 | import pandas as pd |
1 | regions |
concat()
另外一种常用的数据整合方法是concat,即我希望按照某种方式把两个规整的数据集进行拼接。拼接原型函数非常简单:
1 | pd.concat(objs, axis=0, join='outer', keys=None) |
- objs:带拼接的数据集,通常以列表的形式传入;
- join:可选inner、outer,含义同merge函数;
- keys:定义新的分组索引,用来区分传入的数据集;
1 | import pandas as pd |
1 | sites AQI PM25 SO2 |
数据分组与聚合
数据包含在Series、DataFrame数据结构中,可以根据一个或多个键分离到各个组中。分组操作之后,一个函数就可以应用到各个组中,产生新的值。如下图则是简单的分组聚合过程。
- df.groupby(‘key’) key为指定分组的列
1 | import pandas as pd |
1 | names classes grades |
聚合函数如下:
自定义聚合函数
实现步骤:
- 自定义函数
- 分组后通过agg或者aggregate进行聚合
1 | def classes_ptp(x): |
1 | import pandas as pd |
1 | classes |
分组块上应用函数
实现步骤:
- 定义函数
- 通过apply方法将函数应用到分组后的数组
1 | def sort_df(df): |
1 | import pandas as pd |
1 | names classes grades |
除了以上分组形式,还可以通过字典、series、函数进行分组
1 | import pandas as pd |
1 | 语文 数学 英语 |
1 | import pandas as pd |
1 | classes grades |