6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pandas Error: Exception: cannot handle a non-unique multi-index!

Posted at

pandasで、マルチインデックスを持つDataFrame同士を結合したらしようとしたらタイトルのようなエラーが発生した.

pd.concat([df1, df2, ...], axis=1)

エラーの意味は、インデックスに重複があるからconcatを実行できないよという内容だったので、実際に調べたら幾つかのDataFrameのインデックスに重複があることが判明。
indexの重複除去はストレートな関数が用意されていなさそうなので、DataFrameを読み込むときにあらかじめ重複を削除することによって解決。

解決策1
def read_csv_wrap(f):
    df = pd.read_csv(f).pipe(
        lambda d: d.drop_duplicates(
            list(d.columns[:3]), keep='first'
        )
    ).pipe(
        lambda d: d.set_index(
            list(d.columns[:3])
        )
    )
    return df

ちなみに、DataFrameをindexをkeyにして順番にmergeしていくことによって、重複があってもエラーなく連結することができた

解決策2
df_merged = data_frames[0]

for df in data_frames[1:]:
    df_merged = df_merged.merge(df, left_index=True, right_index=True, how='outer')

このばあい、df_mergedは重複したindexを残したままだったので、重複行を残す必要がことさらない場合一つ目の解決法がベター

pandasのマルチインデックスは仕様が謎だし扱いが難しい...

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?