【问题标题】:Getting " AttributeError: 'float' object has no attribute 'items' " with pandas.io.json.json_normalize使用 pandas.io.json.json_normalize 获取“ AttributeError: 'float' object has no attribute 'items'”
【发布时间】:2020-02-14 16:47:10
【问题描述】:

当尝试使用 json_normalize 函数对 pandas 数据帧中的系列进行规范化时,出现错误:

"AttributeError: 'float' object has no attribute 'items'" 

该系列的每一行都包含一个嵌套的 json,尽管有些行不包含该系列中某些 json 中存在的所有属性

在那些嵌套的 json 中还有一个字段 "timestamp":{"$date":1578411194000},它也存在于同一数据框的另一列中,这给了我在另一个尝试展平其他系列时出错。

我假设AttributeError 与不是所有包含所有字段的 JSON 或某事有关。那些timestamps.json_normalize 确实适用于其他一些df-columns。

我希望这是足够的信息。提前非常感谢!

【问题讨论】:

  • 该错误是因为您可能正在循环某个级别,然后值不是另一个字典,而是一个浮点数。您可以通过检查 hasattr(7.0, 'items') 之类的内容来处理这些不同的情况,除了使用您的变量而不是 7.0
  • 我通过使用 json.loads 而不是 pd.read_json 加载数据解决了错误,之后 json_normalize 运行良好。至于条件语句,我使用了类似 normalized_data = json_normalize([x for x in df['column'] if ('key' in x)]) 而不是 hasattr()。
  • 请回答您自己的问题。否则,如果有人搜索没有答案的问题,就会找到此帖子。

标签: python json pandas


【解决方案1】:

如果存在可以使用 dropna() 解决的 NaN 字段,则会发生这种情况:

pd.json_normalize(df.explode("field")["field"]))
=> AttributeError: 'float' object has no attribute 'items'

pd.json_normalize(df.explode("field")["field"].dropna())
=> no error

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 2022-12-04
    • 2022-12-01
    • 1970-01-01
    • 2017-10-21
    • 2020-04-26
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多