看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
除了简单的数学统计外,我们往往对数据还需要做非统计性计算,如去重、格式化等等,接下来我们将介绍一些数据的加工处理方法。
注:本文所使用的 df
和 s
是数据信息一文中的数据。
df.diff()
可以做位移差操作,经常用在一个序列性数据中上一个数据和下一个数据之前的差值,如增量研究。
# 本行与前一行的差值(即当前值比上一行增加了多少)
# 无前一行的本行值为 NaN
df.diff()
df.diff(axis=1) # 向右一列
df.diff(2)
df.diff(-1) # 新的本行为本行减去后一行
df.shift()
可以对数据进行移位,不做任何计算,移动后目标位置的类型无法接收收的为 NaN
。
# 整体下移一行,最顶的一行为 NaN
df.shift()
df.shift(3) # 移三行
# 整体上移一行,最底的一行为 NaN
df.Q1.head().shift(-1)
# 向右移动一位
df.shift(axis=1)
df.shift(3, axis=1) # 移三位
# 向左移动一位
df.shift(-1, axis=1)
# 实现了 df.Q1.diff()
df.Q1 - df.Q1.shift()
df.all() # 返回所有列all()值的Series
df.any()
# 从 pandas 2.0 开始,DataFrame 和 Series 的 any() 必须以关键字的形式传参
df.any(axis=1) # 按行
# 用表达式计算生成列。仅支持列,不是太安全
df.eval('Q2Q3 = Q2 + Q3')
df.eval('Q2Q3 = Q2 + Q3', inplace=True) # 替换生效
# 四舍五入
df.round(2) # 指定字段指定保留小数位,如有
df.round({'Q1': 2, 'Q2': 0})
df.round(-1) # 保留10位
# 每个列的去重值的数量
df.nunique()
s.nunique() # 本列的去重值
# 真假检测
df.isna() # 值的真假值替换
df.notna() # 与上相反
对 df 整体所有元素做加减乘除等计算:
df + 1 # 等运算
df.add() # 加
df.sub() # 减
df.mul() # 乘
df.div() # 除
df.divmod() # 返回 (a // b, a % b)
df.truediv() # Divide DataFrames (float division).
df.floordiv() # Divide DataFrames (integer division).
df.mod() # 模,除后的余数
df.pow() # 指数幂
df.dot(df2) # 矩阵运算
squeeze() 可以实现数据从 DataFrame 降至 Series,再降到标量,完成数据挤压。如果是单列(行),挤压为 Series,单个值直接挤压为标量。
# 单列 DataFrame 转为 Series
df[['Q1']].squeeze()
# 单值 DataFrame 和 Series 转为标量
df.loc[1, 2].squeeze() # 36
df.loc[df.index==5, ['name']].squeeze() # 'Harlie'
df.Q1.head(1).squeeze() # 89
# 单值 DataFrame 挤压为行或列 Series
df.loc[df.index==5, ['name']].squeeze('columns')
'''
5 Harlie
Name: name, dtype: object
'''
df.loc[df.index==5, ['name']].squeeze('rows')
'''
name Harlie
Name: 5, dtype: object
'''
# 不重复的值及数量
s.value_counts()
s.value_counts(normalize=True) # 重复值的频率
s.value_counts(normalize=True)*100 # 当前值在序列中的百分比
s.value_counts(sort=False) # 不按频率排序
s.unique() # 去重的值 array
s.is_unique # 是否有重复
# 最大最小值
s.nlargest() # 最大的前5个
s.nlargest(15) # 最大的前15个
s.nsmallest() # 最小的前5个
s.nsmallest(15) # 最小的前15个
s.pct_change() # 计算与前一行的变化百分比
s.pct_change(periods=2) # 前两行
s1.cov(s2) # 两个序列的协方差
更新时间:2024-12-02 18:51:58 标签:pandas 计算