укажите dtypes при сохранении кадра данных pandas в двоичный файл - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть пандас 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 голосов
/ 23 февраля 2019

Решение похоже на 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...