【问题标题】:Python - Pandas Describe Throwing Error: unhashable type 'dict'Python - Pandas 描述抛出错误:不可散列的类型“dict”
【发布时间】:2020-07-07 17:24:54
【问题描述】:

更新:我正在使用“Socrata Open Source API”中的一些示例代码。我注意到代码中的以下注释:

# First 2000 results, returned as JSON from API / converted to Python 
# list of dictionaries by sodapy.

我不熟悉 JSON。

我已经下载了一个数据集,创建了一个包含大量列的 DataFrame 'df'。

df = pd.DataFrame.from_records(results)

当我尝试使用 describe() 方法时,我得到“TypeError: unhashable type: 'dict'”:

df.describe()
...
TypeError: unhashable type: 'dict'

如何识别产生此错误的列?

更新 2: 根据 Yuca 的要求,我附上了 df 的摘录:

【问题讨论】:

  • 你能把df.head()的结果包括进来吗?
  • 如果您只是想找出哪些列产生了错误,您可以使用for column in df 然后使用df[column].describe(),因为列只是系列,您可以在系列上调用 describe
  • @Yuca - 列太多,无法包含 head 的输出。你在找什么?
  • @Thunderwood - 抱歉,我在 Juypter Notebook 中执行此操作。当我接受你的建议时,没有输出。帮忙?
  • 数据框构造函数的结果。 describe 是内置的,所以它失败的唯一原因是有一个扭曲的 DataFrame

标签: python json pandas socrata


【解决方案1】:

我今天遇到了同样的问题,并对不同版本的 pyarrow 做了一些研究。 here我发现在过去(

【讨论】:

  • 安装正确版本的pyarrow似乎是解决方案
【解决方案2】:

pandas0.25.3 可以读取包含 dicts 的 json,显然 pandas1.0.1 没那么多

df = pd.read_json(path,lines=True)
TypeError: unhashable type: ‘dict’ 

pandas1.0.1 为它在 pandas0.25.3 中工作的同一文件抛出上述内容。

问题是 tracked 并且显然已在 master 中修复,我认为它将使其进入下一个版本。

【讨论】:

    【解决方案3】:

    感谢用户社区 (h/t G Anderson),我拼凑了一个解决方案:

    for i in df.columns:
    if df[i].transform(type).any() == dict:
        df = df.drop(i, axis= 1)
    

    transform(type).any() 检查第 i 列中的所有元素,如果元素是 dict 类型,则删除该列。

    谢谢大家!

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      相关资源
      最近更新 更多