另一种选择是将其添加为列索引的附加级别,使其成为 MultiIndex:
In [11]: df = pd.DataFrame(randn(2, 2), columns=['A', 'B'])
In [12]: df
Out[12]:
A B
0 -0.952928 -0.624646
1 -1.020950 -0.883333
In [13]: df.columns = pd.MultiIndex.from_tuples(zip(['AA', 'BB'], df.columns))
In [14]: df
Out[14]:
AA BB
A B
0 -0.952928 -0.624646
1 -1.020950 -0.883333
这样做的好处是保持 DataFrame 的正确数据类型,因此您仍然可以对 DataFrame 进行快速且正确的计算,并允许您通过旧列名和新列名进行访问。
.
为了完整起见,这里是 DSM(已删除的答案),将列设置为行,正如已经提到的,这通常不是一个好主意:
In [21]: df_bad_idea = df.T.reset_index().T
In [22]: df_bad_idea
Out[22]:
0 1
index A B
0 -0.952928 -0.624646
1 -1.02095 -0.883333
请注意,数据类型可能会发生变化(如果这些是列名而不是正确的值),就像在这种情况下一样...因此,如果您实际上打算对此进行任何工作,请务必小心,因为它可能会更慢,甚至可能会失败:
In [23]: df.sum()
Out[23]:
A -1.973878
B -1.507979
dtype: float64
In [24]: df_bad_idea.sum() # doh!
Out[24]: Series([], dtype: float64)
如果列名are实际上是被误认为标题行的行,那么您应该更正它关于读取数据 (e.g. read_csv
use header=None
).