在Pandas中使用Regex提取特定单词

2024-05-17 10:17:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从下面的数据框中提取国家的名称

country
0   NaN
1   Country: America
2   Country: France ...More CountriesFranceNorwayP...
3   NaN
4   Country: India

使用以下正则表达式语句

import re
regex = re.compile(\
    r"Country: (?P<country>\w+)"
    )

df['country'] = df['country'].str.extractall(regex).droplevel(1)

不管它回来了

country
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN

而不是返回

country
0   NaN
1   America
2   France
3   NaN
4   India

我错过了什么

请告知


Tags: 数据re名称dfmore语句国家nan
2条回答

您可以使用extract

df['country'] = df['country'].str.extract(r'Country:\s*(\w+)')

熊猫测试:

import pandas as pd
import numpy as np
df = pd.DataFrame({'country' : [np.nan, 'Country: America', 'Country France ... More countries...']})
df['country'].str.extract(r'Country:\s*(\w+)')
#          0
# 0      NaN
# 1  America
# 2      NaN

您还可以避免regex并使用^{}

In [86]: df = pd.DataFrame({'country' : [np.nan, 'Country: America', 'Country: France ... More countries...', np.nan, 'Country: India']})

In [87]: df
Out[87]: 
                                 country
0                                    NaN
1                       Country: America
2  Country: France ... More countries...
3                                    NaN
4                         Country: India

In [94]: df.country.str.split(':').str[1].str.split().str[0]
Out[94]: 
0        NaN
1    America
2     France
3        NaN
4      India
Name: country, dtype: object

相关问题 更多 >