可以在“追加模式”中将pandas DataFrame保存为二进制吗?

时间:2014-05-14 15:02:20

标签: python pandas

可以在“追加”模式下将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()的增量版本,我仍然希望看到它。

1 个答案:

答案 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