繁体   English   中英

为什么 DataFrame 列对于 json 转换必须是唯一的?

[英]Why DataFrame columns must be unique for json convert?

组合两个数据框后,我有这个数据框:

ip                 accountname      name      gsm
192.168.1.1        aaaa             john doe  850
192.168.1.2        bbbb             jane doe  860

我想将数据帧转换为 json:

json_df = df3.set_index('ip').T.to_json()

我有:

ValueError: DataFrame columns must be unique for orient='columns'.

IP 在数据帧中是唯一的。 索引列是唯一的。 我怎样才能避免这个错误? 任何建议将不胜感激。

如果df3.set_index('ip').index.is_unique为 false,则表示您复制了 ip,可能是由于先前的合并。

如果你不关心重复,你可以使用to_json(orient='records')

我对同样的事情感到困惑。 正如“saccodd”所暗示的那样,我使用了:

df.index.is_unique

答案是“真的”。

但是,在检查我的列的名称后:

for col in df.columns: 
    print(col)

我得到:

Area
Month
2019
2020
2019
2020

换句话说,我有 2 列名称为“2019”和 2 列名称为“2020”。

换句话说:列名不是唯一的(这就是错误消息实际上所说的,就字母而言......)。

在我的情况下,这是由于以下查询:

select Area, 
       parking_month as Month, 
       SUM(CASE WHEN parking_year = 2019 THEN amount ELSE 0 END) as "2019",
       SUM(CASE WHEN parking_year = 2020 THEN amount ELSE 0 END) as "2020",
       SUM(CASE WHEN parking_year = 2019 THEN seconds ELSE 0 END) as "2019",
       SUM(CASE WHEN parking_year = 2020 THEN seconds ELSE 0 END) as "2020",
from some_parking_data

将此查询更改为:

select Area, 
       parking_month as Month, 
       SUM(CASE WHEN parking_year = 2019 THEN amount ELSE 0 END) as "A2019",
       SUM(CASE WHEN parking_year = 2020 THEN amount ELSE 0 END) as "A2020",
       SUM(CASE WHEN parking_year = 2019 THEN seconds ELSE 0 END) as "T2019",
       SUM(CASE WHEN parking_year = 2020 THEN seconds ELSE 0 END) as "T2020",
from some_parking_data

解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM