pandas对象的简单运算和统计运算

pandas对象的简单运算和统计运算

一、简单运算

  • 与普通数字的加减乘除

    • 直接将选择的数据 使用运算符号 + - * /即可
  • pandas对象(series、df、ml)之间的加减乘除

    • pandas提供了add()sub()mul()div()分别表示加减乘除(注意乘法是对应元素相乘,而不是矩阵乘法)并且可以使用axis参数指定沿行还是沿列进行计算

二、逻辑运算

  • 不同于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
"""
posted @ 2025-03-18 15:36  BigSun丶  阅读(42)  评论(0)    收藏  举报