Python プログラミング

【Python】pandasでcsvを読み込むとインデックスと列がズレる場合の原因と対処法

この記事は約2分で読めます。

 

こんにちはミナピピンです。

 

仕事でPythonを触っていたのですが、クライアントから頂いたcsvをpandasで読み込むと列がズレて先頭列のデータが勝手にインデックスになるという謎の現象が起こりました。index_col=0などを指定しても少しハマりましたが原因が分かれば大したことはない話でした。

 

csvを読み込むとインデックスと列がズレる原因

 

最初はタブ区切りとカンマ区切りの違いかとも思ったのですが、結果からいくと、原因はcsvの端に欠損値の列が含まれていたことでした。

 

つまり、列はN列だったのに対して、データ上は欠損値の列を含めてN+1列存在しており、それが原因で一番左端の列のデータがインデックスに押し込まれる形になってしまっていたわけですね。気が付けば単純な話なのですがエクセル上でファイルの中身を確認してもエクセルは欠損値はNaNではなく空欄で表示するので、列とデータの数がズレていることにすぐには気づけませんでした。

 

csvを作成した人に問い合わせると、pythonのcsvもモジュールで何かしたのデータをcsvに整形したみたいですが、整形特に以下のようなコードを書いていました。

 

csv.write(列1のデータ+','+列2のデータ+','+列3のデータ+','+'\n')

 

不要なのは列3の後ろにある「,」で、これがあると欠損値の列が列3の横に作成されてしまうため、作成したcsvをPythonで再び読み込むと列がズレてインデックスに押し込まれる形になってしまうわけですね。

 

エクセルの取り扱いもたまにハマることがあるので油断できません。では~

 

関連記事:https://zetaseya.work/python%E3%80%81pandas%E3%81%AEcsv%E3%83%87%E3%83%BC%E3%82%BF%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%A7%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%81%AE%E5%88%97%E3%81%8C%E3%81%9A%E3%82%8C%E3%81%A6/

 

コメント

タイトルとURLをコピーしました