毎日の事務仕事でExcelからCSVファイルに切り替えました。データ分析をするようになったからです。これまではExcelの画面上で行や列を選んでいました。しかし、pandasで自動化を試すと、慣れないエラーで手が止まります。特に先頭行を取り出そうとしただけで、真っ赤な文字が表示されました。自分の何が間違っているのかさっぱり分かりませんでした。
特に困ったのはilocを使ったときのことです。データの中身を確認しようとしたからです。画面上では確かにデータが存在しているように見えました。しかし、プログラムを実行すると範囲外だというエラーが出ます。データが空なのか、行番号の指定が間違っているのか、全く見当がつきませんでした。
後から分かったことですが、原因の多くは理解不足にありました。データ抽出の順序やインデックスの仕組みを分かっていなかったのです。条件で絞り込んだ後は、該当データがない場合もあります。データを削除したり並び替えたりして、行番号の感覚がずれることもありました。私はlocとilocの違いも曖昧なまま使っていて、余計に混乱していたのです。
この記事では、pandasでの安全なデータ取得方法を共有します。私が実際にエラーを解消するために学んだ内容です。空判定、行数や列数の確認、locとilocの使い分けを失敗談と整理します。同じエラーで止まっている方の確認材料になれば幸いです。
0件データへのiloc[0]エラー
毎月届く月次データを加工する作業でのことです。いつものように先頭行を取り出そうとしました。業務用のCSVを読み込みます。そして、最初の行だけを抽出する簡単な処理を書いたのです。ところが、実行した瞬間に画面に真っ赤な文字が表示されました。そのままプログラムが止まってしまいます。慣れないエラーメッセージを読み解きました。何やら範囲外だという指摘が書かれています。ilocという関数を使って先頭行を指定しました。なのになぜかデータが見つからないようです。Excelなら一行目をクリックするだけで済みます。なぜPythonだとこんなに苦労するのかと途方に暮れました。
念のためにデータの行数を確認しようと考えます。lenコマンドでデータフレームの長さを調べてみました。すると、なんと結果はゼロになっていたのです。CSVファイルの中身は確かに存在しているはずです。読み込みの段階で何かが起きているのでしょう。あるいは、抽出条件を厳しくしすぎたのかもしれません。
月次CSVを条件で絞ったあと、該当データが0件なのにdf.iloc[0]で先頭行を取ろうとして落ちました。
ゼロ始まりの罠
エラーメッセージの英語を分解してようやく意味が理解できました。singleは単一の、positionalは位置のを指します。indexerは指定子という意味です。つまり、場所をひとつだけ指定しました。しかし、その場所が範囲外であるという宣告だったのです。私はこれまでExcelの行番号と同じ感覚で数値を入力していました。プログラミングの世界では、位置番号はゼロから始まります。そのことをすっかり忘れていたのです。十行目のデータを取ろうとしました。うっかり十という数値を指定してエラーが出ていたのです。十行目なら番号は九であるべきでした。
この単純なミスに気づいたときは冷や汗が出ました。自分の思い込みの強さに驚いたのです。エラーが出たときは、まずデータフレームの形を確認します。シェイプというコマンドを打ちましょう。データの行数と列数がわかるからです。もしデータの行数が五しかなかったとします。六番目以降を指定した瞬間にこのエラーが必ず発生するのです。エラーが出たら、指定した数値を確認します。
ここで一度立ち止まって考えてみてください
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。現役エンジニアのサポートで、未経験から実践的なスキルを身につけられます。
空データフレームのエラー原因と確認法
データ分析の作業中にエラーが発生したときのことです。真っ先に疑ったのが条件抽出の後の状態でした。ある特定の条件を指定して絞り込みをかけたのです。その結果として返ってきたデータフレームが空っぽでした。何もデータがない状態です。それなのに先頭の行を無理やり取り出そうとしました。そのため、行列の位置を指定する命令が空振りを起こしたのです。エラーメッセージを眺めながら必死に追いかけました。自分のプログラムがどこでつまずいたのかを探したのです。まず最初に行ったのはデータフレームの確認でした。抽出後のデータが本当に空ではないかを見ました。
具体的には、データフレーム名にドットを付けます。そしてemptyという属性を表示させました。もしここが真であれば、条件に合うデータは存在しません。次に、そもそも行数がいくつあるのかを知ろうとしました。lenという関数を使って中身の長さを調べたのです。さらに確実を期すために、print関数も使いました。データフレームの中身を画面にそのまま出力して眺めたのです。

エラー原因をコード側だと思い込んでいましたが、実際は条件に合う行が1件も残っていませんでした。
自分の手元では、emptyとlenを先に見るだけで原因確認の手戻りが30分ほど短くなりました。
Pandasのインデックスは0から
Excelでデータを扱っていたときは、1行目が先頭だと思っていました。これを当たり前のように考えていたのです。しかしpandasでは、すべての位置番号が0から始まります。この事実を知り戸惑いました。先頭の1行目を取得しようとします。慣れた感覚のまま1を指定するとエラーになることがありました。このとき、画面には見慣れないエラーが表示されます。single positional indexerの範囲外エラーです。何が悪いのか全く分かりませんでした。試しにlen関数でデータの行数を確認してみます。すると、確かにデータが想定よりも少ないことに気づきました。
行番号が0から始まるルールを無視していました。1を指定したことが原因だとようやく理解できたのです。先頭行を取り出すときは、迷わず0を指定するように変えました。最後の行を取り出すときも、最終行の番号を調べる必要はありません。Excelとは違ってマイナス1を指定するだけです。末尾のデータを簡単に取得できると知って感動しました。
![Pythonコードでiloc[0]とiloc[1]の違いを確認している画面。日本](https://corenica-lab.com/wp-content/uploads/2026/06/iloc-zero-based-row.webp)
loc/ilocの使い分け
ずっと名前と番号がごちゃ混ぜになっていました。どちらを使えばいいのか悩んでいたのです。あるとき、csvから読み込んだデータの特定行を取り出そうとしました。いつものようにilocを使ってエラーにぶつかります。調べてみると、locとilocのルールの違いを知りました。locはindexのラベル名で指定します。ilocは0から始まる整数位置で指定するのです。例えばindexが日付になっているデータだとします。ilocで日付を入れても動きません。そんなときはlocを使ってラベル名で直接指定するのが正解でした。逆に、ラベルが数字の連番であることもあります。
それでもデータの並び順で取り出したいときはilocを使うのが確実です。私は混乱したとき、まずdf.indexを見るようにしました。ラベルが何になっているか確認する癖をつけたのです。もしラベルが0からの連番でなかったと考えましょう。ilocを使うと意図しないデータが取れたりエラーになったりします。

ilocエラーの原因とインデックス再設定
データ分析をしていると、抽出作業の途中で気づくことがあります。インデックスが飛び番になっている状態です。普段は0から順番に並んでいるものだと思っていました。途中の行を削除した後のデータで不連続になっていることに気がつきません。そのまま処理を進めてしまいました。その状態でilocを使って特定の行を取り出そうとしたのです。するとエラーが発生して作業が止まってしまいました。なぜ順番通りに指定しているのにエラーが出るのでしょうか。画面の前で何度も頭を抱えてしまいました。結局、ilocはあくまで位置番号で指定するものだと理解します。
インデックスのラベルとは無関係だったのです。これに気づくまで時間がかかりました。そこで、作業をやりやすくするための機能を使うことにします。リセットインデックスという機能です。具体的には、データフレームに対してこれを実行します。ドロップを真に設定することで、古いインデックスを削除しました。そして新しく0から振り直すようにしたのです。

indexが飛び番のままなのに、Excelの行番号のような感覚で扱って混乱しました。
iloc列指定ミス、shape確認で解決
ある日、CSVファイルを読み込んで特定の列を抽出しようとしました。ilocを使って列番号を指定したときのことです。またしても範囲外エラーが出てしまいました。行番号は正しいはずなのに、なぜか動かない状況に焦ります。エラーメッセージを読み直しました。列の指定位置がデータの範囲を超えていると書かれています。そこで、まずはデータ全体がどうなっているのか確認することにしました。df.shapeを実行すると、行数と列数が表示されます。画面には思ったよりも少ない列数しか表示されていません。読み込んだはずのデータが途中で切れていることに気づきました。
列番号を数え間違えていたことが原因だったのです。それからは、ilocを使う前に必ず確認する習慣をつけました。df.shapeで全体のサイズを見るのです。列が何番まであるのかを把握してから数値を入れるようにしました。この確認作業を挟むだけで、エラーに遭遇する頻度は劇的に減ります。今では、データを取り出す前に念のため列数を見ておきます。

shape確認を入れてから、列番号の指定ミスで処理を止める回数が月に数回からほぼゼロになりました。
エラー時のデータ確認手順
エラーが出たときはまず、データが中身を持っているか確認します。具体的には、データフレームに対して空かどうかを調べるのです。専用のコマンドを実行してみます。もしここで空だと分かれば、抽出条件が厳しすぎると判断できます。該当データがないことが原因だとすぐに気づけるのです。次に、データの行数を確認します。自分が指定した番号が範囲内に収まっているかをチェックするのです。データが十行しかないのに百行目を取り出そうとしていたとします。そんな単純なミスを見つけるためです。それでも解決しないときは、列数も確認します。列番号の指定が間違っていないかを見直すのです。
よくあるのが、列の並び順が変わっているケースです。意図しない列を指してしまっているかもしれません。次に、locとilocの使い分けを再確認します。ラベル名で指定すべき場所を位置番号で指定していないかを見ましょう。自分を疑いながら見直す時間が一番緊張します。最後に、インデックスが飛び番になっていないかを確認しましょう。
無料プレゼント
Excel業務を自動化する前に確認するチェックリスト(PDF)
自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。
¥980 ミニキット
コピペで動かせる3スクリプト+自動化チェックリスト
最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。
関連リンクとチェックリスト
関連記事
pandasで行番号だけでなく列名でもつまずく場合は、KeyErrorの切り分けも一緒に見ておくと原因を追いやすくなります。
関連書籍
Python・pandas関連書籍を、手元で見返せる形にしておきたい場合
pandasのエラー対応は、似た症状を何度も見返すことが多いです。データ前処理や型変換を手元で確認できる本を1冊置いておくと、調べ直しの時間を減らしやすいです。
学習サービスとアンケート
このスキルを活かしてさらに前へ進むなら
PythonやExcel自動化スキルを持ったまま、ITエンジニアとして転職したい方には「EBAエデュケーション」が選択肢です。企業が求めるエンジニア像に合わせたカリキュラムで、実務直結のスキルを習得できます。
[アンケート] この記事は役に立ちましたか?

