Pandas
11 Pandas之数据规整
11.1索引与分层索引
索引
- 查看索引:df.index
- 指定索引:df.index = [,] 个数必须一致
- 重置索引:df.reindex([,]) 无需个数一致
- 指定某一列作为index:df.set_index(“M”,drop=False)
- 返回index的唯一值:df.set_index(“M”).index.unique()
- df.reset_index():将分层索引层级移动到列中
分层索引
分层索引是Pandas一个重要的特性,允许在一个轴上拥有多个索引层级。
11.2 数据合并
数据合并也就是说将多个数据集拼接在一起,但是合并的方式主要分为:pandas.merge,pandas.concat,df.join。以下,我们来详细的介绍。
df_l.join
df_l.join(df_r,how=“left”) 默认情况下是把行索引相同的数据合并到一起,以df_l为主。
pd.merge
pd.merge(df_l,df_r) 根据一个或多个键将行进行连接
- how 指定拼接方式;inner,outer,left,right。默认是inner
- on 需要连接的列名。注:必须是公共列
- left_on 左边数组中用作连接的列
- right_on 右边数组中用作连接的列
pd.concat
pd.concat((df_l,df_r),axis=0) 使对象在轴向上进行黏合或"堆叠"
11.3 数据分组与聚合
数据包含在Series、DataFrame数据结构中,可以根据一个或多个键分离到各个组中。分组操作之后,一个函数就可以应用到各个组中,产生新的值。如下图则是简单的分组聚合过程。
- df.groupby(‘key’)
- key为指定分组列
下面1张图片扩展,可以了解
聚合函数如下:
自定义聚合函数
实现步骤:
- 自定义函数
- 分组后通过agg或者aggregate进行聚合
def classes_ptp(x):
return x.max()-x.min()
df1.groupby(by="classes")["grades"].agg(classes_ptp)
df1.groupby(by="classes")["grades"].aggregate(classes_ptp)
分组块上应用函数
实现步骤:
- 定义函数
- 通过apply方法将函数应用到分组后的数组
def sort_df(df):
return df.sort_values(by="grades")
df1.groupby(by="classes").apply(sort_df)
除了以上分组形式,还可以通过字典、series、函数进行分组