0

我有一个数据框,我想更改列名。目前我正在使用下面的方法,其中涉及转置、重新索引和转置。必须有一个更简单的方法......

任何建议表示赞赏

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

谢谢,扎克cp

4

2 回答 2

2

rename_axis允许重命名而不创建/删除列。重命名可以使用函数或一对一映射(类似字典)来完成,映射可以是部分的(不必包括所有名称)。

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
于 2013-04-10T17:55:54.503 回答
1

也许我低估了这个问题,但这是一个相当微不足道的方法。

使用以下命令获取列名列表(实际上是 a pd.Index):

df.columns

遍历列名以查看是否有乱码。如果发现一列名称乱码,则新建一个名称好听的列,然后删除旧列,如下所示:

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

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

于 2013-04-10T15:31:46.570 回答