Python 如何替换数据框中包含括号或数字的列中的条目?
我需要替换所有在名称中有括号或数字的国家的名称。例如:“玻利维亚(多民族国家)”应为“玻利维亚”,“瑞士17”应为“瑞士”,“美利坚合众国20”应为“美利坚合众国”。 我使用replace()和split()尝试了这个方法,但没有任何效果Python 如何替换数据框中包含括号或数字的列中的条目?,python,pandas,dataframe,Python,Pandas,Dataframe,我需要替换所有在名称中有括号或数字的国家的名称。例如:“玻利维亚(多民族国家)”应为“玻利维亚”,“瑞士17”应为“瑞士”,“美利坚合众国20”应为“美利坚合众国”。 我使用replace()和split()尝试了这个方法,但没有任何效果 有人能帮我一下吗。你可以将这个正则表达式模式与str.extract一起使用。: I have a dataframe like this: Country Energy Supply En
有人能帮我一下吗。你可以将这个正则表达式模式与
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,如果答案有所帮助,请考虑投票。也可以通过单击我答案左侧的勾选标记
将其标记为已接受。