Python 使用正则表达式提取数据帧中括号或数字之前的前导子字符串

Python 使用正则表达式提取数据帧中括号或数字之前的前导子字符串,python,pandas,regex-lookarounds,Python,Pandas,Regex Lookarounds,我正在寻找一种解决方案,提取一个没有其他名称或数字的名称 我的目标是将不在括号中、没有空格和数字的子字符串提取到新列中 例如: 串新串 玻利维亚多民族玻利维亚国 美利坚合众国20美利坚合众国 数据如下所示: **Country** **Energy Supply** Antigua and Barbuda 8000000 Bolivia (Plurinational State

我正在寻找一种解决方案,提取一个没有其他名称或数字的名称

我的目标是将不在括号中、没有空格和数字的子字符串提取到新列中

例如:

串新串 玻利维亚多民族玻利维亚国 美利坚合众国20美利坚合众国 数据如下所示:

**Country**                               **Energy Supply** 
Antigua and Barbuda                           8000000   
Bolivia (Plurinational State of)              50000
Iran (Islamic Republic of)                    20000  
Sint Maarten (Dutch part)                     58000
United States of America20                    65000
China, Macao Special AdministrativeRegion4    52000
.....more cases....                        ....more cases....
df['newcontry']=df['Country'].str.extract(r'(\w*\s)')
**Country**                               **Energy Supply**   newcontry
    Antigua and Barbuda                           8000000      Antigua
    Bolivia (Plurinational State of)              50000        Bolivia
    Iran (Islamic Republic of)                    20000        Iran
    Sint Maarten (Dutch part)                     58000        Sint
    United States of America20                    65000        United
    China, Macao Special AdministrativeRegion4    52000        China
我的代码如下所示:

**Country**                               **Energy Supply** 
Antigua and Barbuda                           8000000   
Bolivia (Plurinational State of)              50000
Iran (Islamic Republic of)                    20000  
Sint Maarten (Dutch part)                     58000
United States of America20                    65000
China, Macao Special AdministrativeRegion4    52000
.....more cases....                        ....more cases....
df['newcontry']=df['Country'].str.extract(r'(\w*\s)')
**Country**                               **Energy Supply**   newcontry
    Antigua and Barbuda                           8000000      Antigua
    Bolivia (Plurinational State of)              50000        Bolivia
    Iran (Islamic Republic of)                    20000        Iran
    Sint Maarten (Dutch part)                     58000        Sint
    United States of America20                    65000        United
    China, Macao Special AdministrativeRegion4    52000        China
并返回如下内容:

**Country**                               **Energy Supply** 
Antigua and Barbuda                           8000000   
Bolivia (Plurinational State of)              50000
Iran (Islamic Republic of)                    20000  
Sint Maarten (Dutch part)                     58000
United States of America20                    65000
China, Macao Special AdministrativeRegion4    52000
.....more cases....                        ....more cases....
df['newcontry']=df['Country'].str.extract(r'(\w*\s)')
**Country**                               **Energy Supply**   newcontry
    Antigua and Barbuda                           8000000      Antigua
    Bolivia (Plurinational State of)              50000        Bolivia
    Iran (Islamic Republic of)                    20000        Iran
    Sint Maarten (Dutch part)                     58000        Sint
    United States of America20                    65000        United
    China, Macao Special AdministrativeRegion4    52000        China

为了解决此错误,我可以更改哪些内容?

假设您只需要字符串的前导块,您可以在\d和\:r^.+??之间使用一个交替组:\d\\\$和一个懒汉?提取您感兴趣的区块

>>> df = pd.DataFrame({"Country": ["Bolivia (Plurinational State of)", "United States of America20", "Antigua and Barbuda"]})
>>> df
                            Country
0  Bolivia (Plurinational State of)
1        United States of America20
2               Antigua and Barbuda
>>> df["Country"].str.extract(r"^(.+?) ?(?:\d|\(|$)")
                          0
0                   Bolivia
1  United States of America
2       Antigua and Barbuda

假设您只需要字符串的前导块,则可以在\d和\:r^.+??之间使用交替组:\d\\\$和一个懒汉?提取您感兴趣的区块

>>> df = pd.DataFrame({"Country": ["Bolivia (Plurinational State of)", "United States of America20", "Antigua and Barbuda"]})
>>> df
                            Country
0  Bolivia (Plurinational State of)
1        United States of America20
2               Antigua and Barbuda
>>> df["Country"].str.extract(r"^(.+?) ?(?:\d|\(|$)")
                          0
0                   Bolivia
1  United States of America
2       Antigua and Barbuda

另一个选择是替换你不想要的东西

df['newcontry']=df['Country'].str.replace(r' ?(?:\(|\d).*', '')

另一个选择是替换你不想要的东西

df['newcontry']=df['Country'].str.replace(r' ?(?:\(|\d).*', '')

似乎你几乎总是需要第一个单词,你试过了吗?我认为只有第一个单词的输出才是OP的正则表达式当前正在生成的,但他们实际上想要最上面的示例。似乎你几乎总是需要第一个单词,你试过了吗?我认为只有第一个单词的输出才是OP的正则表达式当前正在生成的,但他们实际上想要最上面的例子。我认为安提瓜和巴布达的caseGood通话失败,修正了。我认为安提瓜和巴布达的caseGood通话失败,修正了。