![](/img/trans.png)
[英]ValueError: DataFrame index must be unique for orient='columns'
[英]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.