如何用字典存储熊猫数据框

问题描述 投票:1回答:1

我有很大的数据集,并以pickle格式(4 GB)存储,并且花了很多时间读取文件。我使用pickle的原因是我有2列带有字典的列,并且在加载文件后有必要保持这种类型。

所以我的问题是如何优化读取,存储和操作我的数据?

我的数据框看起来像这样以及在加载数据后保存dict类型的必要条件:

   0  1  2  3    4      5
0  1  2  3  4  {2:1}  {1:2}
1  2  4  6  8  {2:1}  {1:2}
python pandas
1个回答
0
投票

您可以做的是在保存之前将字典转换为字符串,并在加载后转换回字符串。这样,您可以将其另存为csv文本,并且避免使用pickle,在这种情况下可以加快您的工作速度。

import pandas as pd

# dummy df with dict types
ds = pd.Series([{1: 2}, {3: 4}])
df = pd.DataFrame(ds, columns=['a'])
print(df.iloc[0].values[0], type(df.iloc[0].values[0]))
>>> {1: 2} <class 'dict'>

# convert dict col to str objects
df['a'] = df['a'].apply(str)
print(df.iloc[0].values[0], type(df.iloc[0].values[0]))
>>> {1: 2} <class 'str'>

# save
df.to_csv('mydf.csv', index=False)

# read csv
df = pd.read_csv('mydf.csv')
print(df.iloc[0].values[0], type(df.iloc[0].values[0]))
>>> {1: 2} <class 'str'>

# convert str objects back to dicts
df['a'] = df['a'].apply(eval)
print(df.iloc[0].values[0], type(df.iloc[0].values[0]))
>>> {1: 2} <class 'dict'>
© www.soinside.com 2019 - 2024. All rights reserved.