Pandas 提供了丰富的功能用于筛选数据,以下列举 20 种常用方法:
假设我们有一个名为 df 的 DataFrame,包含以下数据:
-
使用布尔索引
直接使用条件表达式筛选数据:
# 年龄大于 25 岁的
df[df['age'] > 25]
2. 使用 isin 方法
筛选属于指定列表中的值:
# 城市为 'New York' 或 'London' 的
df[df['city'].isin(['New York', 'London'])]
3. 使用 ~ 取反
筛选不满足条件的数据:
# 城市不是 'New York' 的
df[~df['city'].isin(['New York'])]
4. 使用 query 方法
使用字符串表达式筛选数据:
# 年龄大于 25 岁且性别为男性的
df.query("age > 25 and gender == 'M'")
5. 使用 loc 属性
根据标签筛选数据:
# 索引为 1 到 3 的行
df.loc[1:3]
6. 使用 iloc 属性
根据位置筛选数据:
# 前 3 行
df.iloc[:3]
7. 使用 head 方法
筛选前几行数据:
# 前 2 行
df.head(2)
8. 使用 tail 方法
筛选后几行数据:
# 后 2 行
df.tail(2)
9. 使用 sample 方法
随机筛选数据:
# 随机抽取 2 行
df.sample(2)
10. 使用 nlargest 方法
筛选最大的 n 个值:
# 年龄最大的 2 个人
df.nlargest(2, 'age')
11. 使用 nsmallest 方法
筛选最小的 n 个值:
# 年龄最小的 2 个人
df.nsmallest(2, 'age')
12. 使用 between 方法
筛选在指定范围内的值:
# 年龄在 25 到 30 岁之间的
df[df['age'].between(25, 30)]
13. 使用 startswith 方法
筛选以指定字符串开头的值:
# 名字以 'A' 开头的
df[df['name'].str.startswith('A')]
14. 使用 endswith 方法
筛选以指定字符串结尾的值:
# 城市以 'k' 结尾的
df[df['city'].str.endswith('k')]
15. 使用 contains 方法
筛选包含指定字符串的值:
# 城市包含 'o' 的
df[df['city'].str.contains('o')]
16. 使用正则表达式
使用 str.match 方法筛选匹配正则表达式的值:
# 名字匹配正则表达式 '^B.*' 的
df[df['name'].str.match(r'^B.*')]
17. 使用 lambda 函数
使用 apply 方法应用自定义筛选逻辑:
# 筛选年龄为偶数的
df[df['age'].apply(lambda x: x % 2 == 0)]
18. 根据多列的值进行筛选
结合多个条件表达式:
# 年龄大于 25 岁且城市为 'New York' 的
df[(df['age'] > 25) & (df['city'] == 'New York')]
19. 根据索引和列名筛选
结合 loc 和条件表达式:
# 索引为 1 到 3,且年龄大于 25 的
df.loc[1:3, df['age'] > 25]
20. 根据索引和列位置筛选
结合 iloc 和条件表达式:
# 前 3 行,且第 2 列 (age) 大于 25 的
df.iloc[:3, df.columns.get_loc('age') > 25]
以上只是 Pandas 筛选数据的部分常用方法,你可以根据实际需求组合使用这些方法,或者探索更多高级用法。