to_csv()和read_csv()用于包含序列化对象的数据帧

时间:2018-03-06 14:53:02

标签: python python-3.x pandas file-io

我已经证明从pandas数据帧的单元格中存储和检索序列化对象在从csv存储并再次加载后失败了:

a = df['cookie'].iloc[0]
print (type(a))
>> <class 'requests.cookies.RequestsCookieJar'>

然后

df.to_csv('file2.csv')
df2 = pd.read_csv('file2.csv')
b = df2['cookie'].iloc[0]
print(type(b))
>> <class 'str'>

在它的单元格中,它看起来只是方括号而是

c = '[' + b + ']'

..也无法修复它。

顺便说一下:

print(pd.__version__)
>> '0.19.2'

如果你需要其中一个对象进行测试,你可以这样做:

import requests
url = 'http://www.facebook.com/'
r = requests.get(url)
c = r.cookies

来自pandas.DataFrame.to_csv已尝试添加mode='wb',但这只会生成错误消息。

pandas.read_csv甚至不包含mode选项,因此如果确实无法确定如何将其取回。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

引用字符串会解决问题吗?

import csv
df.to_csv(‘file2.csv’, csv.QUOTE_NONNUMERIC)

我不确定你是否可以从中获得你需要的东西,但也许......你可以将cookie转换为字典并从那里获取字符串值。

url = 'http://www.facebook.com/'
r = requests.get(url)
c = r.cookies
c_dict = dict(c)

答案 1 :(得分:1)

我认为您不能将Cookie或其他非平凡的对象存储为普通文本文件/ csv中的文本。但是,pickle会对您有用。

import pickle

# dump dataframe to a serialized pickle, df.pkl will be its filename
with open('df.pkl', 'wb') as output:
    pickle.dump(df, output)

# then you can load it back with
with open('df.pkl', 'rb') as infile:
    df_from_pickle = pickle.load(infile)