将更改应用于数据框的列名称

时间:2013-04-10 14:50:28

标签: python pandas

我有一个数据框,我想更改列名。目前我正在使用下面的方法,包括转置,重新索引和转置。 Theres必须是一种更简单的方式.....

任何建议表示赞赏

import pandas as pd

#make a dataframe with wacky column names
d = {'garbled #### one' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
     'garbled ### two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

#fix the column names by transposing, reseting index, string manipulation,
#and transposing back  
df = df.T
df = df.reset_index()
df['index'] = df['index'].apply(lambda x: x.split()[0]+ " " +x.split()[2])
df = df.set_index('index')
df = df.T
df

index   garbled two garbled one
a    1   1
b    2   2
c    3   3
d    4   4

感谢, zach cp

2 个答案:

答案 0 :(得分:2)

rename_axis可以在不创建/删除列的情况下重命名。重命名可以通过函数或一对一映射(类似于dict)完成,映射可以是部分的(不必包括所有名称)。

In [42]: df
Out[42]: 
   garbled #### one  garbled #### two
a                 1                 1
b                 2                 2
c                 3                 3
d                 4                 4

In [43]: df.rename_axis(lambda x: x.split()[0]+ " " +x.split()[2])
Out[43]: 
   garbled one  garbled two
a            1            1
b            2            2
c            3            3
d            4            4

In [44]: df.rename_axis({'garbled #### one': 'one', 'garbled #### two': 'two'})
Out[44]: 
   one  two
a    1    1
b    2    2
c    3    3
d    4    4

答案 1 :(得分:1)

也许我低估了这个问题,但这是一个相当简单的方法。

获取列名称(实际为pd.Index)列表:

df.columns

迭代列名以查看是否有乱码。如果您找到名称乱码的列,请创建一个具有良好名称的新列,并删除旧列,如下所示:

df["good-one"] = df["garbled #### one"]
del df["garbled #### one"]

除非表格很大,并且复制的数据量是一个问题,否则这将有效。