Python 如何使用字典存储数据帧

Python 如何使用字典存储数据帧,python,pandas,Python,Pandas,我有一个很大的数据集,并以pickle格式(4GB)存储,读取文件要花很多时间。我使用pickle是因为我有两列字典,在加载文件后保留这种类型是必要的 所以我的问题是如何优化数据的读取、存储和操作 我的数据框看起来像这样 加载数据后需要保存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} 您可以做的是在保存之前将字典转换为字符串,并在加载之后转换回字符串。通过这种方

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

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

我的数据框看起来像这样 加载数据后需要保存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}

您可以做的是在保存之前将字典转换为字符串,并在加载之后转换回字符串。通过这种方式,您可以将其保存为csv文本,并避免使用pickle,在这种情况下,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'>
将熊猫作为pd导入
#具有dict类型的伪df
ds=pd.Series([{1:2},{3:4}])
df=pd.DataFrame(ds,columns=['a'])
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 
#将dict col转换为str对象
df['a']=df['a'].应用(str)
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 
#拯救
df.to_csv('mydf.csv',index=False)
#读取csv
df=pd.read\u csv('mydf.csv')
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 
#将str对象转换回dicts
df['a']=df['a'].应用(评估)
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 

您可以做的是在保存之前将词典转换为字符串,然后在加载之后再转换回字符串。通过这种方式,您可以将其保存为csv文本,并避免使用pickle,在这种情况下,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'>
将熊猫作为pd导入
#具有dict类型的伪df
ds=pd.Series([{1:2},{3:4}])
df=pd.DataFrame(ds,columns=['a'])
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 
#将dict col转换为str对象
df['a']=df['a'].应用(str)
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 
#拯救
df.to_csv('mydf.csv',index=False)
#读取csv
df=pd.read\u csv('mydf.csv')
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 
#将str对象转换回dicts
df['a']=df['a'].应用(评估)
打印(df.iloc[0].值[0],键入(df.iloc[0].值[0]))
>>> {1: 2} 

您在使用pickle时有什么问题吗,或者您想知道是否还有其他问题,更有效的方法?你考虑过使用拼花地板吗?@Jano的问题是,阅读大型pickle文件需要花费大量时间,我想知道如何以更有效的方式做到这一点。这些字典是否经常重复,或者每行的字典是否都不同?@Jano different使用pickle有问题吗?或者你想知道是否有问题还有其他更有效的方法吗?你考虑过使用拼花地板吗?@Jano的问题是阅读大的pickle文件需要花费很多时间,我想知道如何以更有效的方式做到这一点。这些字典是经常重复还是每一行都不同?@Jano不同