如何使用 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)创建一个新的布尔系列 不...因为您将直接处理没有containsstr 对象,并且其本机成员资格测试没有正则表达式功能,您将拥有使用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 将正则表达式应用于系列中的元素 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈之路系列----之-----re模块(正则表达式)

将正则表达式应用于 R 中的字符串

如何使用 jQuery 将正则表达式应用于输入?

将正则表达式应用于数据框的所有列的 Pythonic 方式

Python系列之正则表达式

Pyspark:UDF 将正则表达式应用于数据帧中的每一行