2013-10-23 287 views
7

如何添加標題到DF而不替換當前標題?換句話說,我只想將當前標題向下移動,並將其作爲另一條記錄添加到數據框中。Pandas Dataframe添加標題而不替換當前標題

*第二個問題:如何添加表(示例數據框)到stackoverflow問題?

我有這個(注頭以及它是如何剛剛添加一行:

0.213231 0.314544 
0 -0.952928 -0.624646 
1 -1.020950 -0.883333 

我需要這個(所有其他記錄都將下移,並增加了一個新的記錄) (也:我不能「T正確讀取,因爲我使用s3_text_adapter爲導入CSV,我無法弄清楚如何有忽略類似熊貓頭的參數read_csv):

 A   B 
0 0.213231 0.314544 
1 -1.020950 -0.883333 
+1

重新設置表格,您可以複製並粘貼文本repr,然後確保突出顯示並按CTRL + K/indent 4個空格(將其放入代碼格式)。 –

+0

什麼是s3_text_adapter,你如何使用它?它*應該*有一個標題=無選項... –

+0

http://docs.continuum.io/iopro/TextAdapter.html – horatio1701d

回答

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 

這有保持正確dtypes爲數據幀的利益,所以你仍然可以做你的數據框快速和正確的計算結果,並允許您通過新舊和列名訪問。

爲了完整起見,這裏的帝斯曼(刪除答案),使得它,前面已經提到的列一排,通常不是一個好主意:

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 

注意,D型可能會改變(如果這些列名,而不是正確的價值觀),因爲在這種情況...所以要小心,如果你真的打算做這個的任何工作,因爲它可能會比較慢,甚至可能會失敗:

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) 

如果列名 a實際上一行被誤認爲是標題行,那麼你應該在數據(例如,)中讀取read_csv使用header=None)。

+0

我會刪除我的,因爲我認爲你關於改變dtypes的觀點是很好的。 – DSM

+0

@DSM你總是這樣做後,我+1!這是OP之後的事,但我認爲這樣更正確(雖然可能/應該更容易些)... –

+0

謝謝。這真的很酷,很好知道,但我的意思是如何從上面的第一個df替換標題'A'和'B',但也只是將值'A'和'B'添加爲另一行,換句話說移動值'A'和'B'指向0作爲df中的新的第一條記錄。 – horatio1701d