批量重命名df中的列

时间:2020-06-14 20:25:14

标签: python pandas

我有一个包含GDP数据的数据框。前几列包含有关国家/地区的重要数据(我已将其重命名为我想要的方式),但随后进入一长列,显示从1960年到2015年每年的列以及每年的GDP。此外,这些列的名称已被弄乱,它们以单词“未命名”顺序命名,即“未命名:4”,“未命名:5”等。

我的想法是将所有“未命名”列重命名为年份(从1960年到2015年)。例如 {'Unnamed 4':1960,'Unnamed 5':1961,等等} 。因此,我尝试编写以下代码:

GDP = pd.read_csv('world_bank.csv')
GDP = GDP.rename(columns={"Data Source": "Country", "World Development Indicators": "Country Code", "Unnamed: 2": "Indicator name", "Unnamed: 3": "Indicator Code"})   
GDP = GDP.replace({'Data Source': {'Korea, Rep.': 'South Korea', 'Iran, Islamic Rep.': 'Iran', 'Hong Kong SAR, China': 'Hong Kong'}})

#Below is what I wrote to try to iterate through
GDP = GDP.rename(columns={["Unnamed: "+str(i)+": "+str(j) for i in range(4, 60) for j in range(1960, 2016)]}) 

但是当我使用该代码时,会出现以下错误:

TypeError:不可散列的类型:“列表”

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以像这样直接在python中使用dict comprehension

GDP.rename(columns = {"Unnamed: "+str(i): str(1956+i) for i in range(4, 60)})

答案 1 :(得分:0)

您应该将字典传递给rename函数,该字典应包含现有的列名作为键,替换的列名作为值。您可以在documentation中看到一个示例。