2014-03-12 40 views
3

考慮具有date列作爲索引的數據幀和具有一些觀察值的三列x,yz。我想將這個數據框的內容寫入一個.csv文件。我知道我可以使用df.to_csv,但是,我想添加單位的第二個標題行。在這個例子中,所需的.csv文件看起來像這樣:如何使用pandas to_csv()編寫帶多個標題行的csv文件?

date,x,y,z 
(yyyy-mm-dd),(s),(m),(kg) 
2014-03-12,1,2,3 
2014-03-13,4,5,6 
... 
+0

也許你可以使用普通的Python輸出(file.write())只寫的第一行,然後寫與單元線下,所述報頭中的數據幀。 (不知道這是否正常工作或沒有,但也許一個辦法做到這一點) –

+0

如何是從一開始插入新行與「第二」頭有什麼不同? – Ben

+0

@Ben:我怎麼能用索引字符串做這件事(記住我有一個日期時間索引)?我試着用'df.loc()',但顯然我得到的語法錯誤(我總是得到錯誤'ValueError異常:不安全的附加到類型DatetimeIndex指數用鑰匙YYYY-MM-dd')。 –

回答

3

這不會在您的示例中產生確切的輸出,但它很接近。您可以使用多索引列來存儲第二集(單位)與列標籤:

>>> import pandas as pd 
>>> columns = pd.MultiIndex.from_tuples(
...  zip(['date', 'x', 'y', 'z'], 
...   ['(yyyy-mm-dd)', '(s)', '(m)', '(kg)'])) 
>>> data = [['2014-03-12', 1, 2, 3], 
...   ['2014-03-13', 4, 5, 6]] 
>>> df = pd.DataFrame(data, columns=columns) 
>>> df 
      date x y z 
    (yyyy-mm-dd) (s) (m) (kg) 
0 2014-03-12 1 2 3 
1 2014-03-13 4 5 6 

存儲第二集這樣可以讓你的欄目,以保持正確的類型(例如,列x應該是一個整型):

>>> df.dtypes 
date (yyyy-mm-dd) object 
x  (s)    int64 
y  (m)    int64 
z  (kg)    int64 
dtype: object 

如果存儲了第二集爲一個行的DataFrame,你列dtypes將成爲object,你可能不希望。

編寫的CSV DataFrame格式產生非常相似,你的榜樣東西:

>>> df.to_csv('out.csv', index=False) 
>>> !cat out.csv 
date,x,y,z 
(yyyy-mm-dd),(s),(m),(kg) 
,,, 
2014-03-12,1,2,3 
2014-03-13,4,5,6 

唯一不同的是逗號的額外線,這是大熊貓是如何從數據的實際行分隔多行標題。這允許CSV文件要回讀成等效DataFrame

>>> df2 = pd.read_csv('out.csv', header=[0, 1]) 
>>> df2 
      date x y z 
    (yyyy-mm-dd) (s) (m) (kg) 
0 2014-03-12 1 2 3 
1 2014-03-13 4 5 6 

注:我發現有很多分散在整個this SO question此信息。

相關問題