为了账号安全,请及时绑定邮箱和手机立即绑定

`json.loads()` 和 `.apply(json.loads)` 有什么区别?

`json.loads()` 和 `.apply(json.loads)` 有什么区别?

墨色风雨 2021-08-14 17:10:35
我对编码很陌生,现在我正在尝试处理来自 kaggle 的 TMDB_5000 数据集。我在尝试处理这样的 json 格式数据时遇到了问题。[{"cast_id": 242, "character": "Jake Sully", "credit_id": "5602a8a7c3a3685532001c9a", "gender": 2, "id": 65731, "name": "Sam Worthington", "order": 0}, {"cast_id": 3, "character": "Neytiri", "credit_i...}]我试图用来json.loads()处理数据,代码是credits['cast'] = json.loads(credits['cast']). 但它给了我这样的错误---------------------------------------------------------------------------TypeError Traceback (最近一次调用最后一次) in () ----> 1 credits['cast'] = json.loads(credits['cast'])/anaconda3/lib/python3.6/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant,object_pairs_hook, **kw) 346 if not isinstance(s, (bytes, bytearray)): 347 raise TypeError('the JSON object must be str, bytes or bytearray, ' --> 348 'not {!r}'.format (第类。名))349个S = s.decode(detect_encoding(一个或多个), 'surrogatepass')350TypeError: the JSON object must be str, bytes or bytearray, not 'Series'但是,该代码credits['cast'] = credits['cast'].apply(json.loads)有效。所以我很困惑,因为我认为这两行代码没有区别。谁能给我解释一下?
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

问题是您的credits变量是 Pandas DataFrame,因此credits['cast']Series)。该json.loads函数不知道如何处理来自 的数据类型pandas,因此在执行时会出错json.loads(credits['cast'])

Series然而,该类型有一个apply方法,该方法接受要对其包含的每个值调用的函数。这就是为什么credits['cast'].apply(json.loads)有效,它json.loads作为参数传递给apply.


查看完整回答
反对 回复 2021-08-14
?
白衣非少年

TA贡献1155条经验 获得超0个赞

以下代码:

credits['cast'] = credits['cast'].apply(json.loads)

适用功能json.loads到的每一行credits['cast'](每一行是一个字符串)。结果是一系列解码的对象。

以下代码:

credits['cast'] = json.loads(credits['cast'])

尝试将相同的函数应用于 Series credits['cast'],但该函数不能应用于 Series 。


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 462 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信