在字典中保存熊猫数据框对象

时间:2020-01-02 14:47:23

标签: python pandas dictionary

我有一个熊猫数据集,我想知道是否可以将它包含在字典中,以将其与其他东西一起作为泡菜导出。

import pandas as pd
import pickle
raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'], 
        'age': [42, 52, 36, 24, 73], 
        'preTestScore': [4, 24, 31, 2, 3],
        'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'preTestScore', 'postTestScore'])
dict_ = {"other_stuff": "blabla", "pandas": df}

pickle.dump(dict, "shared.pkl")

当我打开它时,使用:

fp = open("shared.pkl",'rb')
shared = pickle.load(fp)
df= shared["pandas"]

熊猫datframe为空。知道这是否可行或怎么办?

编辑: 我知道我可以简单地对熊猫对象本身df.to_pickle("shared.pkl")进行腌制,但是我有兴趣将其他内容与熊猫文档一起保存在一个方便的腌制文件中。

3 个答案:

答案 0 :(得分:1)

您可以使用以下命令保存词典

with open('shared.pkl', 'wb') as f:
   pickle.dump(dict, f)

然后用

打开
with open('shared.pkl', 'rb') as f:
   dict_ = pickle.load(f)

答案 1 :(得分:1)

pickle.dump命令需要一个文件对象,而不是文件名。

from io import BytesIO
outfile = BytesIO()    
pickle.dump(dict_, outfile)    
outfile.seek(0)
unpickled_dict = pickle.read(outfile)
unpickled_dict['pandas'].info()

将为您提供预期的输出。带有普通数据类型的数据框应该没问题。

答案 2 :(得分:1)

您可以将其保存到列表或字典中,然后像平常一样将其腌制。

也不要使用诸如dict或list之类的内置名称作为名称。不良的风格并导致意外事件。

import pandas as pd
import pickle
raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
        'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
        'age': [42, 52, 36, 24, 73],
        'preTestScore': [4, 24, 31, 2, 3],
        'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'preTestScore', 'postTestScore'])
data = {"other_stuff": "blabla", "pandas": df}


file_write = open(b"resources/shared.pkl","wb")
pickle.dump(data, file_write)
file_write.close()

file_read = open(b"resources/shared.pkl","rb")
shared = pickle.load(file_read)
file_read.close()

print(shared["other_stuff"])
print(shared["pandas"])

输出

blabla
  first_name last_name  age  preTestScore  postTestScore
0      Jason    Miller   42             4             25
1      Molly  Jacobson   52            24             94
2       Tina       Ali   36            31             57
3       Jake    Milner   24             2             62
4        Amy     Cooze   73             3             70