ValueError: Usecols do not match columns, columns expected but not found:

Python
本ページはプロモーションが含まれています

はじめに

pythonでpandasを使ってcsvファイルの編集している時にエラーに遭遇しました。
今回はそのエラーが発生した原因とその時の対処方法などをまとめましたので参考になればと思います。

pandasは非常に強力なライブラリなので使い方のTipsになればと思います。

エラーの原因と対処方法

エラーと原因

まず発生したエラーですが、

ValueError: Usecols do not match columns, columns expected but not found:

というものでした。
日本語に訳すと次のようになります:

「ValueError:Usecolsがcolumnsと一致しません、列が予想されましたが見つかりませんでした:」

このエラーは、Pandasの read_csvread_excel などの関数でデータを読み込む際に、 usecols※1 引数で指定した列が実際のデータに存在しない場合に発生します。

※1:usecolsはPandasのread_csvread_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を使う人が多いのではないかと思います。

こうしたライブラリを使えると高速に簡単にデータの操作が出来るので覚えておくと便利だと思います。

この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。

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