可以在“追加”模式下将pandas DataFrame保存为二进制,类似于在to_csv()DataFrame方法中使用mode ='a'吗?如果有这样的话会很高兴:
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 :(得分: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