Pythonで、CSVファイルから、エクセル(elsx)へデータを出力する際、カラムエラーが発生したので対応した時のまとめをしておきます。
「Pandas」ライブラリを使用した際に今回のようなエラーが発生した際は参考にしてください。
【Pandas】でカラムエラーが発生した際の対応まとめ
今回、CSVファイルを読み込んで、中身のデータをエクセル(xlsx)に書き込むプログラムを作成しました。
import pandas as pd # CSVファイルの読み込み data = pd.read_csv('file_out.csv', encoding='cp932') # Excel形式で出力 data.to_excel('excel-data.xlsx', encoding='utf-8') print('CSV > Excel変換完了')
このプログラムを実行すると以下のようなエラーが発生しました。
Traceback (most recent call last): File "ssh_test_6.py", line 40, in <module> data = pd.read_csv('file_out.csv') File "C:Users\0003563AppDataLocalProgramsPythonPython38-32libsite-packagespandasioparsers.py", line 685, in parser_f return _read(filepath_or_buffer, kwds) File "C:Users\0003563AppDataLocalProgramsPythonPython38-32libsite-packagespandasioparsers.py", line 463, in _read data = parser.read(nrows) File "C:Users\0003563AppDataLocalProgramsPythonPython38-32libsite-packagespandasioparsers.py", line 1154, in read ret = self._engine.read(nrows) File "C:Users\0003563AppDataLocalProgramsPythonPython38-32libsite-packagespandasioparsers.py", line 2059, in read data = self._reader.read(nrows) File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read File "pandas/_libs/parsers.pyx", line 896, in pandas._libs.parsers.TextReader._read_low_memory File "pandas/_libs/parsers.pyx", line 950, in pandas._libs.parsers.TextReader._read_rows File "pandas/_libs/parsers.pyx", line 937, in pandas._libs.parsers.TextReader._tokenize_rows File "pandas/_libs/parsers.pyx", line 2132, in pandas._libs.parsers.raise_parser_error pandas.errors.ParserError: Error tokenizing data. C error: Expected 10 fields in line 19, saw 49
17行目で「C error」、カラム(Column)に関するエラーが発生しました。
色々と調べるとどうも列をうまく読み込めていないことにより、うまくエクセルにデータを貼り付けることができていないようです。
CSVを読み込む際に「カラム(Column)」名を指名する
エラーの問題は、CSVのカラムが読み込めないので、明示的にカラム名を作成して読み込ませることで、エラーを回避することができました。
以下が設定の例となります。
# CSVファイルの読み込み col_names = ['c{0:02d}'.format(i) for i in range(100)] data = pd.read_csv('file_out.csv', encoding="shift-jis", names = col_names)
エンコーディングの「sift-jis」は以下でも問題ないです。
data = pd.read_csv('file_out.csv', encoding='cp932', names = col_names)
詳細は以下の記事を確認ください。
対応後のプログラム
CSVの読み込みの際、カラム名を指名するプログラム全体は以下のようになります。
import pandas as pd # CSVファイルの読み込み col_names = ['c{0:02d}'.format(i) for i in range(100)] data = pd.read_csv('file_out.csv', encoding='cp932', names = col_names) # Excel形式で出力 data.to_excel('excel-data.xlsx', encoding='utf-8') print('CSV > Excel変換完了')
実行後、エクセルにデータが出力されていることを確認できます。
列にカラム名「c0x」が表示され、正常にデータが出力されています。
サーバーを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す