【问题标题】:ValueError: DataFrame index must be unique for orient='columns'ValueError: DataFrame 索引对于 orient='columns' 必须是唯一的
【发布时间】:2021-06-10 20:55:54
【问题描述】:

我将许多数据帧合并成一个更大的数据帧,

pd.concat(dfs, axis=0)

然后我可以将其转储到 json

(Pdb) df.to_json()
*** ValueError: DataFrame index must be unique for orient='columns'.

我该如何解决?

【问题讨论】:

  • 这个错误是不言自明的,你真的希望你的索引值是一系列重复的文本值吗?

标签: python pandas


【解决方案1】:

该错误表明您的数据帧索引具有非唯一(重复)值。由于您似乎没有使用索引,因此您可以使用以下命令创建一个新索引:

df.reset_index(inplace=True)

df.reset_index(drop=True, inplace=True)

如果你想删除之前的索引。

也检查这个link

【讨论】:

    【解决方案2】:

    Pandas 提供了不同的策略来格式化 JSON 中的数据。 'orient' 参数有 5 个允许值,如下所述:Pandas IO tools documentation。 'index' 和 'columns' 策略需要唯一索引,而其他的则不需要。

    如果你有一个主键,你可以修改 DataFrame 的索引,另一种解决方案是可能的。 例如。

    df = df.set_index(['col1', 'col2'])
    

    此处示例:Set multi column index in pandas

    【讨论】:

      【解决方案3】:

      就我而言,我的 pandas DataFrame 中有重复的列。我从一个对两列进行连接的 SQL 查询中读取,这是允许的,但当您想要创建 JSON 时会出现问题。删除列:

      df = df.drop(columns="duplicate_column")

      或者简单地重命名它们

      df.rename(index=str, columns={"duplicate_column": "duplicate_column_2"})

      在我使用 SQL 的情况下,最好将查询更改为不返回您要加入的重复列。

      【讨论】:

        【解决方案4】:

        可以尝试删除重复项。

        df = df.drop_duplicates()
        

        【讨论】:

          【解决方案5】:

          这对我有用:

          df.to_json(orient="split")
          

          【讨论】:

            猜你喜欢
            • 2019-06-05
            • 2011-05-18
            • 1970-01-01
            • 2017-01-07
            • 2021-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-27
            相关资源
            最近更新 更多