如何在不替换当前标题的情况下向DF添加标题?换句话说,我只想将当前标题向下移动,然后将其作为另一条记录添加到数据帧中。
*第二个问题:如何将表(示例数据帧)添加到stackoverflow问题?
我有这个(注意标题以及如何将其添加为行:
0.213231 0.314544
0 -0.952928 -0.624646
1 -1.020950 -0.883333
我需要这个(所有其他记录都向下移动并添加新记录) (另外:我无法正确读取csv,因为我正在使用s3_text_adapter进行导入,我无法弄清楚如何使用忽略类似于pandas read_csv的标头的参数):
A B
0 0.213231 0.314544
1 -1.020950 -0.883333
答案 0 :(得分:11)
另一种选择是将其添加为列索引的附加级别,以使其成为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的正确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
注意,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)
如果列名 实际上是一行被误认为是标题行,那么您应该在读取数据时更正(例如{{1使用read_csv
)。
答案 1 :(得分:0)
关键是指定header = None并使用列添加标题:
data = pd.read_csv('file.csv', skiprows=2, header=None ) # skip blank rows if applicable
df = pd.DataFrame(data)
df = df.iloc[ : , [0,1]] # columns 1 and 2
df.columns = ['A','B'] # title