将1级列索引名称更改为字符串

时间:2019-06-06 00:43:53

标签: python python-3.x pandas

我有一个带有多索引列的数据框。列名称为:

H1                             H2                           H3                     
 0      1       2       3       0      1      2       3      0      1      2      3

我想合并名称,但是level0名称为str格式,level1名称为int格式。

当我尝试加入时:

wide_df.columns = wide_df.columns.levels[1].astype(str)
wide_df.columns = ['_'.join(col) for col in wide_df.columns.values]
wide_df.columns = pd.Index(wide_df.columns)

我得到:

```ValueError: Length mismatch: Expected axis has 12 elements, new values have 4 elements```

如果我摆脱了这一行:

```wide_df.columns = wide_df.columns.levels[1].astype(str)```

然后我得到了:

```TypeError: sequence item 1: expected str instance, int found```

1 个答案:

答案 0 :(得分:1)

您可以重新创建

s= wide_df.columns 
idx=pd.MultiIndex.from_arrays([s.get_level_values(0),s.get_level_values(1).astype(str)])

wide_df.columns=idx

此外,如果您只希望将列展平

wide_df.columns = wide_df.columns.map('{0[0]}_{0[1]}'.format)