如何使用 Python 将正则表达式应用于系列中的元素 [重复]
Posted
技术标签:
【中文标题】如何使用 Python 将正则表达式应用于系列中的元素 [重复]【英文标题】:How to apply regex to an element in a series using Python [duplicate] 【发布时间】:2019-10-19 21:29:31 【问题描述】:我有一个名为“值”的数据框和列。
请找到下面的代码来创建数据框
df = pd.DataFrame('Person_id':[1,2,3,4,5],
'Values':[np.nan,np.nan,'1.Yes','2.No', np.nan],
'Ethnicity':['1.Chinese','2.Indian','3.Malay',np.nan,np.nan])
执行上述代码后,dataframe如下图所示
我只给出了一个示例数据,这是主程序的一部分。
从上面的数据框中,我想使用正则表达式查找特定行的“值”列是否包含“是”或“否”作为值
例如,我想知道 df['Values][2] 的值中是否包含 'Yes' 关键字/术语
为此,我编写了以下代码,但无法获得预期的输出
df['Values'] = df['Values'].astype(str)
df['Values'][2].contains('Yes|No',regex=True)
尽管多次尝试/更改上述代码并通过 SO 进行搜索,但我无法获取/解决此问题。我收到以下错误
AttributeError: 'str' object has no attribute 'contains'
如何获取数据框中列的特定单元格中是否存在值“是”或“否”。
请注意,这是我使用 for 循环和索引的更大程序的一部分。因此,我想在单元级别执行检查并获取输出。使用 df.isin 不会有任何帮助
【问题讨论】:
import re
然后bool(re.search('Yes|No' , df['Values'][2]))
?
或者:df['Values'].str.contains('Yes|No',regex=True)[2]
您忘记使用.str
访问器,例如:df['Values'].str.contains(...)
...
看起来您甚至可能只想使用df['Values'].str.contains('Yes|No', na=False)
创建一个新的布尔系列
不...因为您将直接处理没有contains
的str
对象,并且其本机成员资格测试没有正则表达式功能,您将拥有使用re.match
,正如@Wiktor 在此处的第一条评论中所说。
【参考方案1】:
使用str.contains('Yes|No',regex=True)
例如:
import pandas as pd
import numpy as np
df = pd.DataFrame('Person_id':[1,2,3,4,5],
'Values':[np.nan,np.nan,'1.Yes','2.No', np.nan],
'Ethnicity':['1.Chinese','2.Indian','3.Malay',np.nan,np.nan])
print(df["Values"].str.contains('Yes|No',regex=True))
输出:
0 NaN
1 NaN
2 True
3 True
4 NaN
Name: Values, dtype: object
【讨论】:
以上是关于如何使用 Python 将正则表达式应用于系列中的元素 [重复]的主要内容,如果未能解决你的问题,请参考以下文章