在pandas中设置索引

时间:2017-09-20 13:31:19

标签: python pandas

我正在处理与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 

请告诉我一个正确的方法来实现这一目标。

2 个答案:

答案 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)

拆分以获取两列countryCountry Code并将国家/地区设为索引:

df2 = pd.DataFrame(df.Unnamed.str.split(' ',1).tolist(), columns = ['Country', 'countryCode']).set_index('Country')

您还可以在数据框中添加国家/地区代码作为附加信息。

删除额外的东西,我想:[ANZ],使用正则表达式(如其他答案中所述)

df2 = df2.replace('\[.*?\]','', regex=True)