问题描述
我有一堆代码用于使用 Pandas 读取多个 pickle
文件:
dfs = []
for filename in glob.glob(os.path.join(path,"../data/simulated-data-raw/","*.pkl")):
with open(filename,'rb') as f:
temp = pd.read_pickle(f)
dfs.append(temp)
df = pd.DataFrame()
df = df.append(dfs)
如何使用 pyarrow
读取文件?同时,这种方式不起作用并引发错误。
dfs = []
for filename in glob.glob(os.path.join(path,"*.pkl")):
with open(filename,'rb') as f:
temp = pa.read_serialized(f)
dfs.append(temp)
df = pd.DataFrame()
df = df.append(dfs)
解决方法
仅供参考,pyarrow.read_serialized
已弃用,如果您愿意序列化数据,您应该只使用箭头 ipc
或 Python 标准 pickle
模块。
无论如何,我不确定您要实现的目标,使用 Pickle 保存对象将尝试使用保存时相同的类型反序列化它们,因此即使您不使用 Pandas 加载对象,你仍然会得到一个pandas DataFrame(因为那是你腌制的)并且仍然需要安装pandas才能创建一个。
例如,您可以轻松地去掉 pandas.read_pickle
并将其替换为仅 pickle.load
,但是您返回的仍然是 pandas.DataFrame
import pandas as pd
original_df = pd.DataFrame({"foo": range(5),"bar": range(5,10)})
pd.to_pickle(original_df,"./dummy.pkl")
import pickle
loaded_back = pickle.load(open("./dummy.pkl","rb"))
print(loaded_back)