Pandas Dataframe添加标头而不替换当前标头

hor*_*01d 7 python pandas

如何在不替换当前标题的情况下向DF添加标题?换句话说,我只想将当前标题向下移动,然后将其作为另一条记录添加到数据框中.

*第二个问题:如何将表(示例数据帧)添加到stackoverflow问题?

我有这个(注意标题以及如何将其添加为行:

   0.213231  0.314544
0 -0.952928 -0.624646
1 -1.020950 -0.883333
Run Code Online (Sandbox Code Playgroud)

我需要这个(所有其他记录都向下移动并添加了一条新记录)(另外:我无法正确读取csv,因为我正在使用s3_text_adapter进行导入,我无法弄清楚如何有一个参数忽略类似于pandas read_csv的标题:

       A          B
0  0.213231  0.314544
1 -1.020950 -0.883333
Run Code Online (Sandbox Code Playgroud)

And*_*den 12

另一种选择是将其添加为列索引的附加级别,以使其成为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
Run Code Online (Sandbox Code Playgroud)

这样可以保留DataFrame的正确dtypes,因此您仍然可以对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
Run Code Online (Sandbox Code Playgroud)

注意,dtype可能会改变(如果这些是列名而不是正确的值),就像在这种情况下那样......所以如果你真的计划对此做任何工作要小心,因为它可能会更慢甚至可能失败:

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)
Run Code Online (Sandbox Code Playgroud)

如果列名实际的行,这是误认为是标题行,那么你应该纠正这种在数据读取(如read_csv使用header=None).