如何在一个二进制文件中追加pandas数据帧并从该追加的二进制文件中获取一个数据帧?

时间:2018-10-24 04:48:50

标签: python pandas dataframe binary

由于在连接熊猫数据帧时遇到内存错误,因此我决定以追加模式将熊猫数据帧写入二进制文件,然后读取此二进制文件以获取整个数据帧。

但是,我得到了'ValueError:无法从内存缓冲区创建OBJECT数组'

如果所有数据框都有数字列,则不会发生此问题。 但是,如果其中一列是字符串(在我的情况下,我的数据帧中有很多字符串列),则会弹出此值错误。 这是下面的代码来说明这种情况。 取消注释#works1或#works2即可看到没有错误。 但是使用#下的数据框不起作用会导致ValueError

import pandas as pd
import numpy as np

mtot=0

if os.path.exists('df_all.bin'):
    os.remove('df_all.bin')

for i in range(2):
    #works1
    # df = pd.DataFrame(np.random.randint(100, size=(5, 2)))

    #works2
    # df = pd.DataFrame({'A':[1,2,3], 'B':[1,2,3], 'C':[1.0,2.0,3.0]})
    # df = df.astype(dtype={'A': int, 'B': int, 'C': float})

    #does not work
    df = pd.DataFrame({'A':[1,2,3], 'B':['sample1','sample2','sample3'], 'C':[1.0,2.0,3.0]})
    df = df.astype(dtype={'A': int, 'B': str, 'C': float})

    typ = df.values.dtype
    print('dtype:%s' %typ)

    with open('df_all.bin', 'ab') as f:
        m, n = df.shape
        mtot += m
        f.write(df.values.tobytes())

with open('df_all.bin', 'rb') as f:
    buffer = f.read()
    nparray = np.frombuffer(buffer, dtype=typ)
    data = nparray.reshape(mtot, n)
    whole_df = pd.DataFrame(data=data, columns=list(range(n)))

print(whole_df)
print(whole_df.shape)

os.remove('df_all.bin')

您知道如何解决此问题吗? 我希望外面有人可以帮助我。

谢谢, 伯卡克

0 个答案:

没有答案