我有一个数据框,我想更改列名。目前我正在使用下面的方法,包括转置,重新索引和转置。 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
答案 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"]
除非表格很大,并且复制的数据量是一个问题,否则这将有效。