はじめに
pythonでpandasを使ってcsvファイルの編集している時にエラーに遭遇しました。
今回はそのエラーが発生した原因とその時の対処方法などをまとめましたので参考になればと思います。
pandasは非常に強力なライブラリなので使い方のTipsになればと思います。
エラーの原因と対処方法
エラーと原因
まず発生したエラーですが、
ValueError: Usecols do not match columns, columns expected but not found:
というものでした。
日本語に訳すと次のようになります:
「ValueError:Usecolsがcolumnsと一致しません、列が予想されましたが見つかりませんでした:」
このエラーは、Pandasの read_csv
や read_excel
などの関数でデータを読み込む際に、 usecols
※1 引数で指定した列が実際のデータに存在しない場合に発生します。
※1:usecols
はPandasのread_csv
やread_excel
などの関数で使われる引数の一つです。usecols
を使うと、データから読み込む列を指定することができます。これにより大量のデータの中から特定の列だけを効率的に読み込むことが可能になります。
サンプルプログラム
以下に、このエラーが出る例とその修正例を示します:
エラーを引き起こすコードです:
import pandas as pd
from io import StringIO
data = """col1,col2,col3
1,2,3
4,5,6
7,8,9"""
df = pd.read_csv(StringIO(data), usecols=['col1', 'col4']) # 'col4'は存在しない
dataは3列4行の形式を取っています。
ですが、usecolsで存在しない4列目を取ろうとしているので8行目でエラーになります。
これを実行すると
ValueError: Usecols do not match columns, columns expected but not found: ['col4']
とエラーが表示されます。
次は修正したコードです:
import pandas as pd
from io import StringIO
data = """col1,col2,col3
1,2,3
4,5,6
7,8,9"""
df = pd.read_csv(StringIO(data), usecols=['col1', 'col3']) # 正しく存在する列名を指定
存在する列名を指定しているのでエラーが出なくなります。
エラーが発生しやすい条件など
このエラーは主に以下の場合に起きやすいです。
- データフレームを読み込む際に
usecols
引数で指定した列名がデータフレームに存在しない場合
このエラーを避けるためのTipsとしては、usecols
引数で指定する列名が実際のデータに存在するかどうかを確認することです。
データに詳しくない場合や大量のデータを扱っている場合は、データを一部読み込んで列名を表示してチェックしたり、列名のリストを別途保持しておくなどして、正しい列名を指定するようにしましょう。
データが大きくなるにしたがい、データの構成などがややこしくなるので注意が必要です。
さいごに
今回はPythonでPandasを使った時に存在しない列にアクセスして出たエラーについてでした。
Pythonは機械学習やビッグデータなどデータの扱いに優れています。
またこうしたデータを扱う時にpandasを使う人が多いのではないかと思います。
こうしたライブラリを使えると高速に簡単にデータの操作が出来るので覚えておくと便利だと思います。
この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。