使用映射函数根据字典转换列名时出现问题



我在根据我创建的字典转换Panda数据帧中的列名时遇到问题

housing = pd.read_csv('City_Zhvi_AllHomes.csv')
cols = housing.iloc[:,51:251]
housing = housing.drop(list(housing)[6:251],axis=1)
cols = cols.groupby(np.arange(len(cols.columns))//3, axis=1).mean()
a= pd.read_excel('gdplev.xls', header=None, skiprows=220,index_col=0, names=['GDP'], parse_cols=[4,6])
col_names = list(a.index)
col_names = col_names + ['2016q3']
vals = list(cols.columns.values)
cols_dict = dict(zip(col_names,vals))
cols = cols.rename(columns = cols_dict)

我还尝试过使用地图功能:

cols.columns.map([cols_dict])

期望的结果是将所有列名(0-66(转换为我的字典(2000q1-2016q3(中列出的关键字

然而,我实现的两个解决方案产生了相同的结果,并且列仍然使用相同的名称。

UPDATE根据请求,这里是我的数据帧中的前几行列表:

0   1   2   3   4   5   6   7   8   9   ... 57  58  59  60  61  62  63  64  65  66
0   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 5.154667e+05    5.228000e+05    5.280667e+05    5.322667e+05    5.408000e+05    5.572000e+05    5.728333e+05    5.828667e+05    5.916333e+05    587200.0
1   2.070667e+05    2.144667e+05    2.209667e+05    2.261667e+05    2.330000e+05    2.391000e+05    2.450667e+05    2.530333e+05    2.619667e+05    2.727000e+05    ... 4.980333e+05    5.090667e+05    5.188667e+05    5.288000e+05    5.381667e+05    5.472667e+05    5.577333e+05    5.660333e+05    5.774667e+05    584050.0
2   1.384000e+05    1.436333e+05    1.478667e+05    1.521333e+05    1.569333e+05    1.618000e+05    1.664000e+05    1.704333e+05    1.755000e+05    1.775667e+05    ... 1.926333e+05    1.957667e+05    2.012667e+05    2.010667e+05    2.060333e+05    2.083000e+05    2.079000e+05    2.060667e+05    2.082000e+05    212000.0
3   5.300000e+04    5.363333e+04    5.413333e+04    5.470000e+04    5.533333e+04    5.553333e+04    5.626667e+04    5.753333e+04    5.913333e+04    6.073333e+04    ... 1.137333e+05    1.153000e+05    1.156667e+05    1.162000e+05    1.179667e+05    1.212333e+05    1.222000e+05    1.234333e+05    1.269333e+05    128700.0

还有我的字典样本:

{0: '2000q1',
1: '2000q2',
2: '2000q3',
3: '2000q4',
4: '2001q1',
5: '2001q2',

您可以通过以下方式重命名列:

#Rename Columns
df.rename(columns={'old name1':'new name1','old name2':'new name2'}, inplace=True)

所以你只需要使用:

housing.rename(columns=cols_dict, inplace=True)

但是更改字典,其中键是旧列名,而这些键的值是新名称

cols_dict = dict(zip(vals, col_names))

不过,看看你的代码,看起来你正在把它应用到一个Growby对象上。因此,您需要将"cols"对象更改回简单的普通数据帧,然后进行重命名,或者他们在这里解释如何使用groupby函数重命名Pandas中的列名groupby函数

相关内容

  • 没有找到相关文章

最新更新