我已经证明从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
选项,因此如果确实无法确定如何将其取回。
有什么想法吗?
答案 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)