我在pandas数据框中使用了pd.pivot_table
,列名称变为('A1', 'B1'), ('A1', 'B2')...
之类的元组,我希望它们像'A1_B1', 'A1_B2'...
我试过用
df.columns.values[i] = df.columns.values[i][0] + '_' + df6.columns.values[i][1],
并尝试重命名。
当我检查df.columns.values时,列的名称已更改,但是当我无法使用这些名称进行索引时。我是python的新手,所以可能不知道列名和列索引之间的区别。
任何人都可以帮助我吗?谢谢!
答案 0 :(得分:7)
设置
df = pd.DataFrame(
np.arange(8).reshape(2, 4),
columns=[('A1', 'B1'), ('A2', 'B1'), ('A1', 'B2'), ('A2', 'B2')])
print(df)
(A1, B1) (A2, B1) (A1, B2) (A2, B2)
0 0 1 2 3
1 4 5 6 7
rename
df.rename(columns='_'.join, inplace=True)
print(df)
A1_B1 A2_B1 A1_B2 A2_B2
0 0 1 2 3
1 4 5 6 7
map
df.columns = df.columns.map('_'.join)
print(df)
A1_B1 A2_B1 A1_B2 A2_B2
0 0 1 2 3
1 4 5 6 7
答案 1 :(得分:3)
使用list comprehension
:
df.columns = ['{}_{}'.format(x[0], x[1]) for x in df.columns]
print(df)
A1_B1 A2_B1 A1_B2 A2_B2
0 0 1 2 3
1 4 5 6 7
或者:
df.columns = ['_'.join(x) for x in df.columns]
print(df)
A1_B1 A2_B1 A1_B2 A2_B2
0 0 1 2 3
1 4 5 6 7
答案 2 :(得分:1)
您可以使用df.DataFrame.Index.map
:
df1.columns.map(lambda t: t[0] + "_" + t[1])
答案 3 :(得分:1)
您可能需要迭代。
# a b
# x 1
# y 2
# z 3
答案 4 :(得分:0)
我使用了这种方法:
mydic = dict()
for i,var in enumerate(df.columns):
if isinstance(var, tuple):
mydic[var] = '{}_{}'.format(var[0], var[1])
df.rename(columns = mydic)
这使我能够处理这样一个事实:我的元组中的第二个输入是一个整数,它已成为一个浮点数(并附加了一个恼人的" .0"十进制),而是四舍五入并指定整数
mydic[var] = '{}_{:d}'.format(var[0], round(var[1]))