我正在处理与this
相关的奥运会数据集这就是数据框的样子:
Unnamed: 0 # Summer 01 ! 02 ! 03 ! Total # Winter \
0 Afghanistan (AFG) 13 0 0 2 2 0
1 Algeria (ALG) 12 5 2 8 15 3
2 Argentina (ARG) 23 18 24 28 70 18
3 Armenia (ARM) 5 1 2 9 12 6
4 Australasia (ANZ) [ANZ] 2 3 4 5 12 0
我想做以下事情:
例如,更新的列应为:
Unnamed: 0 # Summer 01 ! 02 ! 03 ! Total # Winter \
0 Afghanistan 13 0 0 2 2 0
1 Algeria 12 5 2 8 15 3
2 Argentina 23 18 24 28 70 18
3 Armenia 5 1 2 9 12 6
4 Australasia 2 3 4 5 12 0
请告诉我一个正确的方法来实现这一目标。
答案 0 :(得分:3)
您可以使用正则表达式并替换为
df = df.replace('\(.+?\)|\[.+?\]\s*','',regex=True).rename(columns={'Unnamed: 0':'Country'}).set_index('Country')
输出:
Summer 01 ! 02 ! 03 ! Total Winter Country Afghanistan 13 0 0 2 2 0 Algeria 12 5 2 8 15 3 Argentina 23 18 24 28 70 18 Armenia 5 1 2 9 12 6 Australasia 2 3 4 5 12 0
如果您不想重命名,请.set_index('Unnamed: 0')
或者感谢@Scott更简单的解决方案是按(
拆分并选择第一个元素,即
df['Unnamed: 0'] = df['Unnamed: 0'].str.split('\(').str[0]
答案 1 :(得分:1)
拆分以获取两列country
和Country Code
并将国家/地区设为索引:
df2 = pd.DataFrame(df.Unnamed.str.split(' ',1).tolist(), columns = ['Country', 'countryCode']).set_index('Country')
您还可以在数据框中添加国家/地区代码作为附加信息。
删除额外的东西,我想:[ANZ]
,使用正则表达式(如其他答案中所述)
df2 = df2.replace('\[.*?\]','', regex=True)