KeyError 使用 read_pickle 将 json_pickle(d) 推文读入数据帧

Posted

技术标签:

【中文标题】KeyError 使用 read_pickle 将 json_pickle(d) 推文读入数据帧【英文标题】:KeyError reading json_pickle(d) tweets into dataframe using read_pickle 【发布时间】:2016-03-23 04:10:25 【问题描述】:

使用 python 2.7 和 jsonpickle 和 pandas 库,我使用 jsonfile.write(jsonpickle.encode(tweets._json,unpicklable=False)+'\n') 将一些推文保存到 .txt 文件中 它使用 jsonpickle 包对推文的 json 值进行编码

当我尝试使用不同的脚本将 txt 文件读入 pandas 数据帧时 tester = pandas.read_pickle(fileToProcess)

我的 traceback 最近的调用是

文件“C:\Python27\lib\pickle.py”,第 858 行,加载中 调度键 键错误:''

我创建的许多文件都出现同样的错误。 这是一个大小为 3.8MB 的示例文件 Sample Tweets File 我是 json 文件的新手,但是熊猫或泡菜专家可以帮助我将推文放入数据框中吗?

【问题讨论】:

【参考方案1】:

read_pickle 方法旨在反序列化使用 pickle 模块创建的数据,例如使用SeriesDataFramesPanelto_picke 方法序列化的数据。如this answer所示。

如果你使用jsonpickle.encode,你应该使用库提供的双重方法jsonpickle.decode来反序列化你的数据。

总的来说,我认为你最好使用 pandas 的序列化机制。

但是如果你太想使用jsonpickle:

    请注意文档中的以下内容,

    如果您永远不需要加载(从 JSON 重新生成 Python 类),您可以传入关键字 unpicklable=False

因此,您不应该将 unpicklable=False 传递给 encode 方法。

    您似乎将每个对象保存到文件中的一行,因此您应该这样做。

类似的东西,

tweets = []
for line in fileToProcess:
    line = line[:-1]  # Drop '\n' char
    tweets.append(jsonpickle.decode(line)) 

【讨论】:

感谢您的回复和指导。如果我想最终得到一个 pandas 数据帧,你会推荐在解码后使用不同的数据结构而不是数组吗(循环的最后一行是否应该读取 tweets.append(jsonpickle.decode(line)) ? 我已经修复了jsonpicke.decode 部分中的变量名。如果您将数据作为 json 并希望将其转换为 DataFrame,那么 pandas.read_json 不做您想要的吗?您可以将数据保存为文件,然后使用 pandas 进行处理。

以上是关于KeyError 使用 read_pickle 将 json_pickle(d) 推文读入数据帧的主要内容,如果未能解决你的问题,请参考以下文章

KeyError:在熊猫中尝试使用.loc方法将布尔列值更改为字符串时

将文件发送到 django 时出现 Keyerror/MultiValueDictKeyError

KeyError:0 在 python 中使用多处理

PySpark:将String类型的DataFrame列转换为Double时出现KeyError

Google 日历 API:KeyError:“位置”

在 Pandas 中使用 groupby 函数时如何解决“keyerror”?