Pandas 筛选包含特定字符列的三种方法及 filter 详解
本文介绍在 Pandas 中快速筛选包含特定字符列的三种常用方法:利用 if 判断结合列表推导式、使用 str.contains 配合列表解析,以及调用 DataFrame 的 filter 函数。重点解析 filter 函数的 like、regex 和 item 参数,展示如何结合行与列条件进行精准数据提取,并提供完整代码示例供参考。
问题提出:
假设面对一个拥有数百列的大型数据集,需要高效定位并提取包含特定字符串 'xxx' 的列名。针对这一需求,本文总结了三种高效的实现路径。
方法一:if 判断结合列表推导式
[x for x in df.columns if 'xxx' in x]
方法二:利用 str.contains 方法配合列表解析式
[x for x in df.columns[df.columns.str.contain('xxx')]]
方法三:使用 DataFrame 的 filter 函数
df.filter(like='xxx').columns
关于 filter 函数,需要补充说明的是,除了基础的 like 模糊匹配外,它还支持通过 regex 参数进行正则表达式匹配,功能更为强大。
查阅官方 API 文档可知,filter 不仅用于列名过滤,还能在行和列两个维度上进行筛选。其完整参数列表如下所示。
item 参数:接收 list 类型的参数,用于保留指定标签的项目。具体示例如下。
# 等同df[['a', 'b', 'c']]
df.filter(item=['a', 'b', 'c'])
like 参数:等同于判断 'xxx' 是否在标签列表中。
regex 参数:用于输入正则表达式字符串 pattern。
axis 参数:指定操作作用的轴(axis)。
更多详细示例可参考官网文档:DataFrame filter 函数。
补充内容:Python Pandas 如何选取满足特定条件的行和列。
此处不再赘述文字,请直接参考以下代码实现。
import pandas as pd
df1 = pd.read_csv("data/trans/bike_flow.csv")
# ['t_idx' 'r_idx' 'c_idx' 'bike_out_cnt' 'bike_in_cnt' 'flow_stay' 'flow_in' 'flow_out']
print(df1.columns.values)
# (23016, 8)
print(df1.shape)
# ['t_idx', 'bike_in_cnt']是取特定的列
# df1['bike_in_cnt'] > 10是取特定的行
df2 = df1[['t_idx', 'bike_in_cnt']][df1['bike_in_cnt'] > 10]
# (328, 2)
print(df2.shape)
以上为个人经验总结,旨在提供参考。如有错误或未考虑周全之处,欢迎指正。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













