如何将列名从元组更改为字符串?

问题描述 投票:0回答:6

我在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],
也尝试了
rename

当我检查

df.columns.values
时,列名称发生了变化,但是当我无法使用这些名称进行索引时。我是 python 新手,所以可能不知道列名和列索引之间的区别。

python pandas string tuples rename
6个回答
19
投票

设置

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

11
投票

使用

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

1
投票

您可以使用

df.DataFrame.Index.map
为此:

df1.columns.map(lambda t: t[0] + "_" + t[1])

1
投票

您可能需要迭代。

final=[]
for x in df.columns.values:
    final.append(x[0]+'_'+x[1])
df.columns.values = final

1
投票

列出对列名称本身的理解:

df = pd.DataFrame(columns=[('ok',1),('ok',2),('ok',3)])
newcols = [x[1] for x in df.columns]
df.columns = newcols
print(df)

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]))
© www.soinside.com 2019 - 2024. All rights reserved.