2014-05-14 19 views
0

能否以「append」模式將pandas DataFrame保存爲二進制文件,類似於在to_csv()DataFrame方法中使用mode ='a'?這將是不錯的:一個人可以保存一個熊貓DataFrame二進制「追加模式」?

df.save(path = 'myFrame', mode = 'a') 

基礎上的建議之下我已經與

def pdAppendPickle(data, path): 
""" Intent: append pickle containing dataframe """ 
    with open(path, 'a') as f: 
     pkl.dump(data, f) 

這是一個恥辱,但是,這不符合pd.load互操作()與pd.save()不同,因爲我們不是連接的。一個人使用的東西,如:

def pdLoadPickles(path): 
    """ Load one or more pickles containing dataframes and concatenate """ 
    f = open(path, 'r') 
    dfs = list() 
    while True: 
     try: 
      df = pkl.load(f) 
      dfs.append(df) 
     except: 
      break  
    f.close()   
    return pd.concat(dfs, axis = 0)  

如果任何人有一個優雅的解決方案,它是真正pd.save的增量版本()我還是想看到它。

回答

0

您可以只使用pickle/cPickle直接做到這一點:

In [78]: import cPickle as pkl 

In [79]: df = DataFrame(randint(5, size=(5, 2))) 

In [80]: df 
Out[80]: 
    0 1 
0 3 2 
1 4 1 
2 0 3 
3 0 0 
4 4 1 

In [81]: df2 = DataFrame(randint(5, size=(5, 2))) 

In [82]: df2 
Out[82]: 
    0 1 
0 2 1 
1 1 0 
2 1 0 
3 0 0 
4 1 3 

In [83]: with open('appended.pkl', 'a') as f: 
    ....:  pkl.dump(df, f) 
    ....: 

In [84]: with open('appended.pkl', 'a') as f: 
    ....:  pkl.dump(df2, f) 
    ....: 

In [85]: f = open('appended.pkl', 'r') 

In [86]: pkl.lo 
pkl.load pkl.loads 

In [86]: pkl.load(f) 
Out[86]: 
    0 1 
0 3 2 
1 4 1 
2 0 3 
3 0 0 
4 4 1 

In [87]: pkl.load(f) 
Out[87]: 
    0 1 
0 2 1 
1 1 0 
2 1 0 
3 0 0 
4 1 3 
+0

謝謝。理想情況下,pd.load('attached.pkl')將檢索連接的數據幀。 – Quant

+0

在pandas github上,PR /建議非常受歡迎。他們不一定會被接受,但可以討論 –

相關問題