Python 如何替换数据框中包含括号或数字的列中的条目?

Python 如何替换数据框中包含括号或数字的列中的条目?,python,pandas,dataframe,Python,Pandas,Dataframe,我需要替换所有在名称中有括号或数字的国家的名称。例如:“玻利维亚(多民族国家)”应为“玻利维亚”,“瑞士17”应为“瑞士”,“美利坚合众国20”应为“美利坚合众国”。 我使用replace()和split()尝试了这个方法,但没有任何效果 有人能帮我一下吗。你可以将这个正则表达式模式与str.extract一起使用。: I have a dataframe like this: Country Energy Supply En

我需要替换所有在名称中有括号或数字的国家的名称。例如:“玻利维亚(多民族国家)”应为“玻利维亚”,“瑞士17”应为“瑞士”,“美利坚合众国20”应为“美利坚合众国”。 我使用replace()和split()尝试了这个方法,但没有任何效果


有人能帮我一下吗。

你可以将这个正则表达式模式与
str.extract一起使用。

I have a dataframe like this:         
    Country                  Energy Supply      Energy Supply per Capita
16  Afghanistan              3.210000e+08       10.0    
17  Albania                  1.020000e+08       35.0    
18  Algeria                  1.959000e+09       51.0    
19  American Samoa           NaN                                        
40  Bolivia 
   (Plurinational State of)  3.360000e+08       32.0
... ... ... ...
213 Switzerland17            1.113000e+09       136.0   
214 Syrian Arab Republic     5.420000e+08       28.0    
215 Tajikistan               1.060000e+08       13.0    
216 Thailand                 5.336000e+09       79.0    
228 Ukraine18                4.844000e+09       107.0   
232 United States of 
    America20                9.083800e+10       286.0
输出:

df['Country'] = df.Country.str.extract('^([^\d\(]*)')[0]

您可以将此正则表达式模式与
str.extract
一起使用:

I have a dataframe like this:         
    Country                  Energy Supply      Energy Supply per Capita
16  Afghanistan              3.210000e+08       10.0    
17  Albania                  1.020000e+08       35.0    
18  Algeria                  1.959000e+09       51.0    
19  American Samoa           NaN                                        
40  Bolivia 
   (Plurinational State of)  3.360000e+08       32.0
... ... ... ...
213 Switzerland17            1.113000e+09       136.0   
214 Syrian Arab Republic     5.420000e+08       28.0    
215 Tajikistan               1.060000e+08       13.0    
216 Thailand                 5.336000e+09       79.0    
228 Ukraine18                4.844000e+09       107.0   
232 United States of 
    America20                9.083800e+10       286.0
输出:

df['Country'] = df.Country.str.extract('^([^\d\(]*)')[0]

您可以将多个
regex
一起使用,如下所示:

考虑以下数据帧:

                      Country  Energy Supply  Energy Supply per Capita
16                Afghanistan   3.210000e+08                      10.0
17                    Albania   1.020000e+08                      35.0
18                    Algeria   1.959000e+09                      51.0
19             American Samoa            NaN                       NaN
40                   Bolivia    3.360000e+08                      32.0
213               Switzerland   1.113000e+09                     136.0
214      Syrian Arab Republic   5.420000e+08                      28.0
215                Tajikistan   1.060000e+08                      13.0
216                  Thailand   5.336000e+09                      79.0
228                   Ukraine   4.844000e+09                     107.0
232  United States of America   9.083800e+10                     286.0

您可以将多个
regex
一起使用,如下所示:

考虑以下数据帧:

                      Country  Energy Supply  Energy Supply per Capita
16                Afghanistan   3.210000e+08                      10.0
17                    Albania   1.020000e+08                      35.0
18                    Algeria   1.959000e+09                      51.0
19             American Samoa            NaN                       NaN
40                   Bolivia    3.360000e+08                      32.0
213               Switzerland   1.113000e+09                     136.0
214      Syrian Arab Republic   5.420000e+08                      28.0
215                Tajikistan   1.060000e+08                      13.0
216                  Thailand   5.336000e+09                      79.0
228                   Ukraine   4.844000e+09                     107.0
232  United States of America   9.083800e+10                     286.0

.str.replace(r“\(.*\)\d+”,“”)
避免两次呼叫。@Ch3steR非常感谢。编辑了我的答案。太棒了!这对我很有效。非常感谢@Mayank Porwal你能告诉我你使用的正则表达式背后的逻辑吗?我不明白这一点。@AniruddhMaini的逻辑是:有两个正则表达式,由
管道(|)隔开。首先是识别偏执主题
()
,并删除其中的所有文本。第二个是简单地从文本中删除<代码>任何数字< /代码>。@ AniruddhMaini,如果答案有所帮助,请考虑投票。也可以通过单击我答案左侧的“
勾选标记”
来标记它已被接受。
.str.replace(r“\(.*\)\d+,”)
,以避免打两次电话。@Ch3steR非常感谢。编辑了我的答案。太棒了!这对我很有效。非常感谢@Mayank Porwal你能告诉我你使用的正则表达式背后的逻辑吗?我不明白这一点。@AniruddhMaini的逻辑是:有两个正则表达式,由
管道(|)隔开。首先是识别偏执主题
()
,并删除其中的所有文本。第二个是简单地从文本中删除<代码>任何数字< /代码>。@ AniruddhMaini,如果答案有所帮助,请考虑投票。也可以通过单击我答案左侧的
勾选标记
将其标记为已接受。