Pandas 手册
基本元素介绍
心智模型
Index:坐标轴标签,用于Series和DataFrame的定位Series:values +IndexDataFrame:2D values + 行Index+ 列Index;或者把每一列理解为共享Index的Series
DatetimeIndex
首先介绍 Panda 中时间相关的类:
Timestamp:时间戳/时间点Timedelta:DurationPeriod:比如pd.Period("2026-09", freq="M")表示整个九月,代表时间段
Timestamp
1 | |
本质上,pandas / NumPy 通常把 datetime 存成 datetime64[ns],底层可以近似理解成一个 int64,也就是距离 1970-01-01 00:00:00 的纳秒数。
创建 DatetimeIndex
1 | |
时间切片
1 | |
选择数据
变换数据
groupby
这个单拎出来记。
比如有这样一个DataFrame df:
1 | |
那么 grouped = df.groupby('product') 的类型是 DataFrameGroupBy,逻辑上可以当作是元组列表
1 | |
Groupby 对象索引取值
可以索引取值 grouped['quantity'],相当于对上面元组列表中每个组中的 DataFrame 统一做一次索引取值。此时类型变为 SeriesGroupBy,若索引是列表,则仍是 DataFrameGroupBy。
查看 Groupby 对象
可以用以下方式看各个 group:
1 | |
聚合操作
对于 GroupBy 对象,常见操作是聚合。聚合函数包括 .max(),.min(),.first(),.mean(),.sum() 等。
对于 DataFrameGroupBy 对象,可以对不同的列指定不同的聚合函数,此时用 .agg({'column1':''mean', 'column2': np.sum, 'column3':lambda x:x.min()}) 这样的写法,字典的值可传函数名字符串或者函数。
注意聚合操作中,by列会自动退出计算,形成聚合后的 DataFrame 的 index。
时间索引 df 的 groupby
统计信息
df.info()
结构与元数据摘要,几行几列,类型,缺失值数量;直接打印,返回值为 None
df.describe()
默认统计数值列的分布信息:均值、标准差、分位数。
传入参数 include='all' 会统计所有类型的列的信息,非数值列统计 unique,freq 等。
sr.value_counts()
统计 Series 的数值频数,返回字典。
Series
Series-to-Series Operations
1 | |
Series-to-Other Operations
1 | |
DataFrame
其他
对 DataFrame 的方法/属性
1 | |
1 | |
底层学习
pivot 的底层实现
这里只考虑 index、columns 和 values 都传单值的情形。
考虑如下 DataFrame:
1 | |
执行 df.pivot(index='user', columns='day', values='value'),首先会把 user 和 day 两列拼成 MultiIndex,然后把 value 列贴上去,组成 Series,注意顺序是不变的:
1 | |
换成这种形式有什么差别呢?主要差别在于,MultiIndex 会被编码成 levels + codes 。会有这样的映射:
1 | |
这实际上就给出宽表的坐标了,后续会构造 的宽表,按 MultiIndex 隐喻的坐标填数。