pandas对象的简单运算和统计运算
pandas对象的简单运算和统计运算
一、简单运算
-
与普通数字的加减乘除
- 直接将选择的数据 使用运算符号
+ - * /
即可
- 直接将选择的数据 使用运算符号
-
pandas对象(series、df、ml)之间的加减乘除
- pandas提供了
add()
、sub()
、mul()
和div()
分别表示加减乘除(注意乘法是对应元素相乘,而不是矩阵乘法)并且可以使用axis
参数指定沿行还是沿列进行计算
- pandas提供了
二、逻辑运算
-
不同于python中的关键字
and or
等,pandas中使用的是逻辑运算符号:&(与)、|(或)、^(异或)、~(取反)、&~(异或取反)
-
pandas提供了一些逻辑运算的函数,如:query和isin
1. query(expr)
- 查询函数,expr表示查询字符串
a = np.arange(48).reshape(8,6)
# 构造行索引序列
xueke =["yuwen","shuxue","yingyu","zhengzhi","tiyu","lishi"]
# 构造列索引序列
m_time =['2025030'+str(i) for i in range(1,a.shape[0]+1)]
df = pd.DataFrame(a,index=m_time,columns=xueke)
print(df)
a = df.query("yuwen>3 & yuwen<24").head()
b =df[(df["yuwen"]>3)&(df["yuwen"]<24)].head() # 效果同上
print(a)
print(b)
"""
yuwen shuxue yingyu zhengzhi tiyu lishi
20250301 0 1 2 3 4 5
20250302 6 7 8 9 10 11
20250303 12 13 14 15 16 17
20250304 18 19 20 21 22 23
20250305 24 25 26 27 28 29
20250306 30 31 32 33 34 35
20250307 36 37 38 39 40 41
20250308 42 43 44 45 46 47
yuwen shuxue yingyu zhengzhi tiyu lishi
20250302 6 7 8 9 10 11
20250303 12 13 14 15 16 17
20250304 18 19 20 21 22 23
yuwen shuxue yingyu zhengzhi tiyu lishi
20250302 6 7 8 9 10 11
20250303 12 13 14 15 16 17
20250304 18 19 20 21 22 23
"""
2. isin(values)
- 判断是否有values这样的数据,类似python中的 if ... in ...
c = df["yuwen"].isin([6,12])
print(c)
"""
20250301 False
20250302 True
20250303 True
20250304 False
20250305 False
20250306 False
20250307 False
20250308 False
"""
三、统计运算
1. 统计函数
# 下面这些函数都将axis作为其参数,默认axis=0表示对索引index进行操作,axis=1表示对列columns进行操作
count非缺失样本(NA)的数量
sum总和
mean均值
mad平均绝对偏差(Mean absolute deviation)
median中位数
min最小值
max最大值
mode众数,即出现最多的数
abs绝对值
prod乘积
stdBessel-corrected标准差
var无偏方差
sem平均标准误差
skew偏度 (三阶矩)
kurt峰度 (四阶矩)
quantile分位数
2. 求最大值、最小值位置函数
idxmax()、idxmin() # 默认axis=0
# 示例
print(df)
print(df.idxmax())
print(df.idxmin())
"""
yuwen shuxue yingyu zhengzhi tiyu lishi
20250301 0 1 2 3 4 5
20250302 6 7 8 9 10 11
20250303 12 13 14 15 16 17
20250304 18 19 20 21 22 23
20250305 24 25 26 27 28 29
20250306 30 31 32 33 34 35
20250307 36 37 38 39 40 41
20250308 42 43 44 45 46 47
yuwen 20250308
shuxue 20250308
yingyu 20250308
zhengzhi 20250308
tiyu 20250308
lishi 20250308
dtype: object
yuwen 20250301
shuxue 20250301
yingyu 20250301
zhengzhi 20250301
tiyu 20250301
lishi 20250301
dtype: object
"""
3. 累计统计函数
cumsum累和,计算前n个数的和
cumprod累积,计算前n个数的乘积
cummax累积最大值,计算前n个数中的最大值
cummin累积最小值,计算前n个数中的最小值
4. 其他数学函数
# 其他函数
value_counts() 统计元素出现次数
corr()相关系数是通过
cov()协方差
info()各列数据的类型、非空值数量和总体样本数,计算占用的内存空间
describe()方法能够自动计算Series对象和DataFrame对象各特征的均值、标准差、最小值、最大值以及分位数。可以通过percentiles参数设置显示哪几个分位数。
- describe()也可以对非数值型数据进行统计
- 如果一个DataFrame对象既包括了数值型特征又包括了非数值型特征,那么describe()方法将默认只对数值型特征进行汇总统计
- 可以通过include和exclude分别指定包括哪些类型的特征和排除哪些类型的特征
- all表示对所有特征进行汇总统计
# 1. value_counts()示例
print(df)
e = df.value_counts() # 统计元素出现次数
print(e)
"""
yuwen shuxue yingyu zhengzhi tiyu lishi
20250301 0 1 2 3 4 5
20250302 6 7 8 9 10 11
20250303 12 13 14 15 16 17
20250304 18 19 20 21 22 23
20250305 24 25 26 27 28 29
20250306 30 31 32 33 34 35
20250307 36 37 38 39 40 41
20250308 42 43 44 45 46 47
yuwen shuxue yingyu zhengzhi tiyu lishi
0 1 2 3 4 5 1
6 7 8 9 10 11 1
12 13 14 15 16 17 1
18 19 20 21 22 23 1
24 25 26 27 28 29 1
30 31 32 33 34 35 1
36 37 38 39 40 41 1
42 43 44 45 46 47 1
dtype: int64
"""
# 2. describe示例
c = df["yuwen"].isin([6,12])
d = df[c]
print(d)
print(d.describe())
"""
yuwen shuxue yingyu zhengzhi tiyu lishi
20250302 6 7 8 9 10 11
20250303 12 13 14 15 16 17
yuwen shuxue yingyu zhengzhi tiyu lishi
count 2.000000 2.000000 2.000000 2.000000 2.000000 2.000000
mean 9.000000 10.000000 11.000000 12.000000 13.000000 14.000000
std 4.242641 4.242641 4.242641 4.242641 4.242641 4.242641
min 6.000000 7.000000 8.000000 9.000000 10.000000 11.000000
25% 7.500000 8.500000 9.500000 10.500000 11.500000 12.500000
50% 9.000000 10.000000 11.000000 12.000000 13.000000 14.000000
75% 10.500000 11.500000 12.500000 13.500000 14.500000 15.500000
max 12.000000 13.000000 14.000000 15.000000 16.000000 17.000000
"""
四、自定义运算
- 通过pandas对象的apply()方法,可以自定义一个运算函数
# 定义一个对yuwen 和lishi两列,求各自最大值-最小值的函数
d = df[['yuwen','lishi']].apply(lambda x:x.max()- x.min(),axis=0) # df[['yuwen','lishi']]是df对象的一种取值方式,先列后行规则
print(d)
"""
yuwen 42
yingyu 42
dtype: int64
"""