【问题标题】:ValueError: No axis named "type" for object type <class 'pandas.core.frame.DataFrameValueError:对象类型 <class 'pandas.core.frame.DataFrame 没有名为“type”的轴
【发布时间】:2017-02-28 19:38:44
【问题描述】:

这是我经过预处理后收到的数据框df

    name    type    range   time                number
0   XXXX    11111   1-120   [1-120, 261.05]     [1-120, 23229]
1   XXXX    11111   121-240 [121-240, 277.79]   [121-240, 6382]
2   XXXX    11111   241-360 [241-360, 269.64]   [241-360, 2769]
3   XXXX    11111   361-480 [361-480, 279.09]   [361-480, 1331]

我想把它转换成下面的json字符串:

[{"name":"XXXX","type":11111,"time":[["1-120",261.05],["121-240",277.79],["241-360",269.64],["361-480",279.09]],"number":[["1-120",23229],["121-240",6382],["241-360",2769],["361-480",1331]]

如果我这样做,我会收到错误ValueError: No axis named "type" for object type &lt;class 'pandas.core.frame.DataFrame'&gt;

jsonresult = df.groupby('name','type')['time','number'].agg(lambda x : x.tolist()).reset_index().to_json(orient='records')
jsonresult

只有当我使用 df.groupby('name')df.groupby('type') 时它才有效。

【问题讨论】:

  • 添加[] - df.groupby(['name','type']) 怎么样?
  • 也可以用agg代替apply
  • @jezrael:至于[],我收到一个错误:ValueError: Function does not reduce。至于apply,我明白了:AttributeError: 'DataFrame' object has no attribute 'tolist'
  • @jezrael:如果它可能有用,我创建了列timenumber,如下所示:df.time = list(map(list, zip(df.range, df.time)))

标签: python pandas


【解决方案1】:

您可以使用转换为tuple 而不是list

jsonresult = df.groupby(['name','type'])['time','number']
               .agg(lambda x: tuple(x)).reset_index().to_json(orient='records')

print (jsonresult)
[{"name":"XXXX",
  "type":11111,
  "time":[[-119,261.05],[-119,277.79],[-119,269.64],[-119,279.09]],
  "number":[[-119,23229],[-119,6382],[-119,2769],[-119,1331]]}]

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 2017-09-02
    • 2020-06-16
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多