2013-06-27 44 views
2

我正在使用to_csv將多索引數據幀寫入到csv文件。 CSV文件已包含在元組multiindexes,像一列:熊貓 - 使用to_csv寫入多索引行

('a', 'x') 
('a', 'y') 
('a', 'z') 
('b', 'x') 
('b', 'y') 
('b', 'z') 

不過,我希望能夠輸出多指標兩列,而不是元組的一列,如:

a, x 
, y 
, z 
b, x 
, y 
, z 

它看起來像tupleize_cols可以實現這個列,但沒有這樣的行選項。有沒有辦法做到這一點?

+1

''tupleize_cols''用於列上的多索引(它的值爲0.12); (''idxa','idxb'])。to_csv()''是你最好的選擇(指定''index_col = ['idxa','idxb']''讀取-back – Jeff

+0

我給出了一個答案,以便更好地解釋 – Jeff

回答

3

我認爲這會做

In [3]: df = DataFrame(dict(A = 'foo', B = 'bar', value = 1),index=range(5)).set_index(['A','B']) 

In [4]: df 
Out[4]: 
     value 
A B   
foo bar  1 
    bar  1 
    bar  1 
    bar  1 
    bar  1 

In [5]: df.to_csv('test.csv') 

In [6]: !cat test.csv 
A,B,value 
foo,bar,1 
foo,bar,1 
foo,bar,1 
foo,bar,1 
foo,bar,1 

In [7]: pd.read_csv('test.csv',index_col=[0,1]) 
Out[7]: 
     value 
A B   
foo bar  1 
    bar  1 
    bar  1 
    bar  1 
    bar  1 

爲了與指數複製寫(一種黑客攻擊的雖然)

In [27]: x = df.reset_index() 

In [28]: mask = df.index.to_series().duplicated() 

In [29]: mask 
Out[29]:  
A    B   
foo  bar    False 
     bar     True 
     bar     True 
     bar     True 
     bar     True 
dtype: bool 

In [30]: x.loc[mask.values,['A','B']] = '' 

In [31]: x 
Out[31]:  
     A    B  value 
0  foo  bar      1 
1                1 
2                1 
3                1 
4                1 

In [32]: x.to_csv('test.csv') 

In [33]: !cat test.csv 
,A,B,value 
0,foo,bar,1 
1,,,1 
2,,,1 
3,,,1 
4,,,1 

讀回是有點棘手,其實

In [37]: pd.read_csv('test.csv',index_col=0).ffill().set_index(['A','B']) 
Out[37]: 
     value 
A B   
foo bar  1 
    bar  1 
    bar  1 
    bar  1 
    bar  1 
+0

對不起,也許我沒有解釋清楚。我希望實現的是刪除csv文件中的重複條目。在你的例子中,我希望只有'foo'出現一旦在csv文件中,這樣當你cat.custv.csv時,你會在第一行看到一個'foo',在後續行看到空白。 – ezbentley

+0

已更新...雖然這是非常不規範的,不確定這會推廣 – Jeff

+0

非常感謝。我不知道這個竅門。 – ezbentley