35
20

More than 3 years have passed since last update.

pandas の to_csv -> read_csv で "Unnamed: 0" が追加された場合の対処法

Last updated at Posted at 2020-01-12

事の発端

事件は Python の pandas で、 以下の様にCSV書き込み→読み込み をシンプルに行った時に起こった。

import pandas as pd

# 変数data を定義してCSVファイルに書き込む
data = pd.DataFrame({'name': ['太郎', '花子', '二郎', '由紀'],
                      '数学': [80, 15, 90, 50],
                      '英語': [80, 70, 50, 65],
                      '国語': [ 90, 60, 60,  60]})
print(data)
data.to_csv('a.csv')


# 書き出したCSV ファイルを読みだして出力
data = pd.read_csv('a.csv')
print(data)

上記を実行した際に、それぞれに出力に差分が生じた。

# 1回目の出力結果
  name  数学  英語  国語
0   太郎  80  80  90
1   花子  15  70  60
2   二郎  90  50  60
3   由紀  50  65  60


# 2回目の出力結果
   Unnamed: 0 name  数学  英語  国語
0           0   太郎  80  80  90
1           1   花子  15  70  60
2           2   二郎  90  50  60
3           3   由紀  50  65  60

Unnamed: 0 という謎カラムが追加されてしまった。これを解消する。

何が起きているのか?

上記書き込みにおいて、以下のCSVファイルが出力されていた。

,name,数学,英語,国語
0,太郎,80,80,90
1,花子,15,70,60
2,二郎,90,50,60
3,由紀,50,65,60

1行目のname の左に想定外の , が追加されてしまっている。
これによって、最初のカラムが無記名とみなされている模様。

対処法

以下のどちらかで対応可能。両方やる必要はない。

to_csv で対応

以下の様にindex をfalse で指定することで解消できる。

data.to_csv('a.csv', index=False)

上記により、以下のCSVファイルを出力することができた。

name,数学,英語,国語
太郎,80,80,90
花子,15,70,60
二郎,90,50,60
由紀,50,65,60
# 書き出したCSV ファイルを読みだして出力
data = pd.read_csv('a.csv')
print(data)
# 出力結果
  name  数学  英語  国語
0   太郎  80  80  90
1   花子  15  70  60
2   二郎  90  50  60
3   由紀  50  65  60

read_csv

以下の様にインデックスカラムを指定する。

data = pd.read_csv('a.csv', index_col=0)
print(data)
# 出力結果
  name  数学  英語  国語
0   太郎  80  80  90
1   花子  15  70  60
2   二郎  90  50  60
3   由紀  50  65  60
35
20
2

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
35
20