Поскольку во время конкатенации кадров данных pandas у меня возникла ошибка памяти, я решил записать кадры данных pandas в двоичный файл в режиме добавления, а затем прочитать этот двоичный файл, чтобы получить весь кадр данных.
Однако я получил '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')
Знаете ли вы, как решить эту проблему?Я надеюсь, что кто-то может мне помочь.
Спасибо, Бурчак