火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

【pandas实操】DataFrame的数据过滤和统计数据统计

作者: 作者的头像   huolong , 时间:2023-08-09 13:24:39 , 所有人可见, 阅读  12

数据过滤

Pandas的过滤功能类似于在NumPy中使用布尔数组进行索引。下面的代码演示了如何根据条件过滤DataFrame中的数据:

filter_ = df['语文'] >= 88
df[filter_]

代码所示:


import pandas as pd 
df = pd.read_excel("chuli001.xlsx")
filter_ = df['语文'] > 88
print(df[ filter_ ])

结果:

    Unnamed: 0  学号  姓名 性别  语文  数学   外语
2            2   3  李四  男  99  96   96
5            5   6  龙龙  男  96  93  100
7            7   8  六六  女  98  97   96
8            8   9  芳芳  女  90  88   89
9            9  10  大山  男  99  98   99
10          10  11  火火  女  98  97   96
11          11  12  天天  男  95  94   92
13          13  14  丹丹  女  89  99   80
14          14  15  彤彤  女  92  98   96

这段代码首先根据条件"语文大于等于88"生成一个布尔数组,并赋值给filter_变量。然后,使用df[filter_]返回满足条件的行数据。

我们还可以使用逻辑运算符进行多条件筛选。下面的代码演示了如何筛选出"生年大于等于80"且"寿命大于等于65"的数据:

df[(df['语文'] >= 80) & (df['数学'] >= 90)]

这段代码使用&运算符对两个条件进行逻辑与操作,并返回满足条件的行数据。

    Unnamed: 0  学号  姓名 性别  语文   数学   外语
2            2   3  李四  男  99   96   96
3            3   4  程程  女  80  100   64
5            5   6  龙龙  男  96   93  100
7            7   8  六六  女  98   97   96
9            9  10  大山  男  99   98   99
10          10  11  火火  女  98   97   96
11          11  12  天天  男  95   94   92
13          13  14  丹丹  女  89   99   80
14          14  15  彤彤  女  92   98   96

多条件筛选结果示例

此外,我们还可以使用.where()方法替换不满足条件的位置的值。下面的代码演示了如何将"数学"列中不满足条件"数学大于等于100"的位置替换为90:

df = df['数学'].where(cond=df['数学'] == 100, other=80)
print(df)

这段代码使用.where()方法将不满足条件的位置的值替换为指定的other值。

结果:

0      80
1      80
2      80
3     100
4      80
5      80
6      80
7      80
8      80
9      80
10     80
11     80
12     80
13     80
14     80
Name: 数学, dtype: int64

数据统计

我们可以使用.describe()方法获取DataFrame的基本统计信息。下面的代码演示了如何获取DataFrame的基本统计信息:

df.describe()

这段代码将返回DataFrame的基本统计信息,包括计数、均值、标准差、最小值、25%分位数、50%分位数、75%分位数和最大值等。

Unnamed: 0         学号         语文          数学          外语
count   15.000000  15.000000  15.000000   15.000000   15.000000
mean     7.000000   8.000000  86.133333   89.800000   88.533333
std      4.472136   4.472136  12.755204   19.860945   14.530100
min      0.000000   1.000000  59.000000   20.000000   50.000000
25%      3.500000   4.500000  79.000000   90.500000   84.500000
50%      7.000000   8.000000  90.000000   96.000000   96.000000
75%     10.500000  11.500000  97.000000   98.000000   96.000000
max     14.000000  15.000000  99.000000  100.000000  100.000000

另外,我们还可以直接调用相应的方法获取特定统计信息。例如,可以使用.mean()方法获取DataFrame的均值:

df.mean()

这段代码将返回DataFrame的每列的均值。

也可以针对特定的列进行统计,例如:

df['语文'].mean()
这段代码将返回"语文"列的均值。

同样地,使用.std()方法可以获取DataFrame或特定列的标准差。

df.std()
df['语文'].std()

同样地,groupby是对各列或各行中的数据进行分组,然后可对其中每一组数据进行不同的操作。

print(df.groupby('性别')['语文'].max())
for sex,score in df.groupby('性别')['语文']:
    print(sex)
    print(score)

结果:

女 
3     80
4     69
6     59
7     98
8     90
10    98
13    89
14    92
Name: 语文, dtype: int64
男 
0     80
1     78
2     99
5     96
9     99
11    95
12    70
Name: 语文, dtype: int64

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码