数据过滤
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