如何从 Pandas 数据框中筛选包含字符串模式的行[重复]
- 2025-03-05 09:14:00
- admin 原创
- 89
问题描述:
假设我们在 Python Pandas 中有一个如下所示的数据框:
df = pd.DataFrame({'vals': [1, 2, 3, 4], 'ids': [u'aball', u'bball', u'cnut', u'fball']})
或者,以表格形式:
ids vals
aball 1
bball 2
cnut 3
fball 4
如何筛选包含关键字“ball”的行?例如,输出应为:
ids vals
aball 1
bball 2
fball 4
解决方案 1:
In [3]: df[df['ids'].str.contains("ball")]
Out[3]:
ids vals
0 aball 1
1 bball 2
3 fball 4
解决方案 2:
df[df['ids'].str.contains('ball', na = False)] # valid for (at least) pandas version 0.17.1
逐步解释(从内到外):
df['ids']
选择ids
数据框的列(从技术上讲,该对象df['ids']
属于类型pandas.Series
)df['ids'].str
允许我们将矢量化字符串方法(例如lower
,contains
)应用于 Seriesdf['ids'].str.contains('ball')
检查系列中的每个元素,以确定元素值是否包含字符串“ball”作为子字符串。结果是一个布尔值系列,表示True
或False
表明“ball”子字符串的存在。df[df['ids'].str.contains('ball')]
将布尔“掩码”应用于数据框并返回包含适当记录的视图。na = False
从考虑中删除 NA / NaN 值;否则可能会返回 ValueError。
解决方案 3:
>>> mask = df['ids'].str.contains('ball')
>>> mask
0 True
1 True
2 False
3 True
Name: ids, dtype: bool
>>> df[mask]
ids vals
0 aball 1
1 bball 2
3 fball 4
解决方案 4:
如果您想将过滤的列设置为新索引,您也可以考虑使用.filter
;如果您想将其保留为单独的列,那么这str.contains
就是可行的方法。
假设你有
df = pd.DataFrame({'vals': [1, 2, 3, 4, 5], 'ids': [u'aball', u'bball', u'cnut', u'fball', 'ballxyz']})
ids vals
0 aball 1
1 bball 2
2 cnut 3
3 fball 4
4 ballxyz 5
并且您的计划是过滤所有包含ids
并ball
设置ids
为新索引的行,您可以执行
df.set_index('ids').filter(like='ball', axis=0)
给出
vals
ids
aball 1
bball 2
fball 4
ballxyz 5
但filter
也允许您传递正则表达式,因此您也可以仅过滤列条目以 结尾的行ball
。在这种情况下,您可以使用
df.set_index('ids').filter(regex='ball$', axis=0)
vals
ids
aball 1
bball 2
fball 4
ballxyz
请注意,现在不包括带有的条目,因为它以它开头ball
但不以它结尾。
如果你想获得以 开头的所有条目,ball
你可以简单使用
df.set_index('ids').filter(regex='^ball', axis=0)
屈服
vals
ids
ballxyz 5
列也一样;您只需更改部分即可axis=0
。如果您根据列进行过滤,则结果为axis=1
。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD