LoginSignup
3
2

More than 3 years have passed since last update.

Pandasのread_csv()・read_table()でヘッダーがずれてしまう

Posted at

はじめに

csv形式で取得したファイルをpandasで取り込んで処理しようとしたところ、ヘッダーとデータがずれてしまったのですが意外と答えにすぐたどり着けなかったので記事にしました。
解決法へジャンプ

動作環境

以下の環境で実行しました。

モジュール version
python 3.8.3
pandas 1.0.5

問題

次のようなcsv形式ファイルをDatFrameとして取り込みます。

example.csv
Time  x   y   z
   0  1   2  10
   1  2   2  10
   2  3   2  10
..

read_csv()を使って取り込みます。

read_csv.py
import pandas as pd
path = 'csvファイルのパス'
df = pd.read_csv(path)
print(df)

ターミナルでの出力結果は次のようになりました。

#    Time\tx\ty\tz
#  0    1\t1\t2\t10
#  1    2\t2\t2\t10
#  2    3\t3\t2\t10
..

余計な\tが入ってしまっています。カンマ区切りではなくタブ区切り(tsv形式)だったようです。

read_tabel()で実行してみます。

read_tsv.py
import pandas as pd
path = 'csvファイルのパス'
df = pd.read_table(path)
print(df)

次のような出力結果になりました。  
\tは無くなりましたが、代わりにヘッダーとデータがずれてしまい、zのデータがすべてNaNになってしまいました。

#    Time  x   y    z
#  0    1  2  10  NaN
#  1    2  2  10  NaN
#  2    3  2  10  NaN

解決法

次のようにread_csv()に引数を与えます。

read_csv_2.py
import pandas as pd
path = 'csvファイルのパス'
df = pd.read_csv(path, sep='\s+')
print(df)

padasのドキュメントによると、1文字以上の文字によって区切られたファイルに対して与える引数のようです。
もともとのデータがタブとスペース区切りになっているのが原因だったようです…。勘弁してよ…笑。

まとめ

タブとスペースによって区切られていたデータをcsv_read()に引数sep='\s+'を与えて、ヘッダーとデータを正しくDataFrameに変換できました。

3
2
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
3
2