将熊猫数据帧保存到二进制文件时指定dtypes

时间:2019-02-12 13:33:00

标签: python pandas numpy

我有一个要写入二进制文件的pandas DataFrame,但是df包含混合的dtypes。如果使用df.values.tofile(),则无法指定其他dtypes(即使在以下示例中指定了astype('f4, f4, i4, i4').tofile())。目前的解决方法是使用struct,但速度很慢!

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.random.random(size=(10, 4)) * 10, columns=['f1', 'f2', 'i1', 'i2'])
df.i1 = df.i1.astype(int)
df.i2 = df.i2.astype(int)

with open('tmp', 'w') as ply:    

    for ix, row in df.iterrows():

        ply.write(struct.pack('<ffii', *row.values))

我正在创建一个.ply文件,该文件要求正确格式化数据。

1 个答案:

答案 0 :(得分:0)

解决方案似乎是df.to_records(index=False).tobytes()

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.random.random(size=(10, 4)) * 10, columns=['f1', 'f2', 'i1', 'i2'])
df.i1 = df.i1.astype(int)
df.i2 = df.i2.astype(int)

with open('test.dat', 'w') as fh:

    fh.write(df.to_records(index=False).tobytes())

arr = np.fromfile('test.dat', dtype='f8, f8, i8, i8')
df2 = pd.DataFrame(arr)
df2.columns = ['f1', 'f2', 'i1', 'i2'] # strange but if columns specified above then df2 == df is False :\
print np.all(df2 == df)