

中嶋悟
名前:中嶋 悟(なかじま さとる) ニックネーム:サトルン 年齢:28歳 性別:男性 職業:会社員(IT系メーカー・マーケティング部門) 通勤場所:東京都千代田区・本社オフィス 通勤時間:片道約45分(電車+徒歩) 居住地:東京都杉並区・阿佐ヶ谷の1LDKマンション 出身地:神奈川県横浜市 身長:175cm 血液型:A型 誕生日:1997年5月12日 趣味:比較記事を書くこと、カメラ散歩、ガジェット収集、カフェ巡り、映画鑑賞(特に洋画)、料理(最近はスパイスカレー作りにハマり中) 性格:分析好き・好奇心旺盛・マイペース・几帳面だけど時々おおざっぱ・物事をとことん調べたくなるタイプ 1日(平日)のタイムスケジュール 6:30 起床。まずはコーヒーを淹れながらニュースとSNSチェック 7:00 朝食(自作のオートミールorトースト)、ブログの下書きや記事ネタ整理 8:00 出勤準備 8:30 電車で通勤(この間にポッドキャストやオーディオブックでインプット) 9:15 出社。午前は資料作成やメール返信 12:00 ランチはオフィス近くの定食屋かカフェ 13:00 午後は会議やマーケティング企画立案、データ分析 18:00 退社 19:00 帰宅途中にスーパー寄って買い物 19:30 夕食&YouTubeやNetflixでリラックスタイム 21:00 ブログ執筆や写真編集、次の記事の構成作成 23:00 読書(比較記事のネタ探しも兼ねる) 23:45 就寝準備 24:00 就寝
はじめに ilocとlocの違いを理解する
この章ではまず iloc と loc の基本を整理します。ilocは位置ベース、locはラベルベースという二つの考え方の違いをしっかり理解することが大事です。データ分析を学ぶとき、DataFrame へのアクセス方法として iloc と loc が登場します。iloc は整数の行番号と列番号を使い、列は 0 から数えます。loc は index のラベル名と列の名前を使い、ラベルの意味を読み取ることが重要です。例えば index が [0,1,2] の DataFrame がある場合、df.iloc[0,0] は最初の行の最初の列を指します。一方 df.loc[0,'A'] は index が 0 の行の A 列を指します。
この違いを理解しておくとコードの意味が直感的になり、後の保守にも役立ちます。さらに スライスの終端の扱い も大きく異なり、iloc は 0:2 のように end を含まないケースが多く、df.iloc[0:2, 0:3] は 0 行目と 1 行目、0 列目から 2 列目までを含みます。これに対して loc は end を含む場合が多いで、df.loc[0:1, 'A':'C'] では行 0 〜 1、列 A 〜 C が含まれます。この挙動の差は実務での動作予測を難しくすることがあるため、実際のデータで確かめる癖をつけると良いです。さらに、boolean のマスクを使う場合の挙動にも注意が必要です。例えば df.loc[df['A'] > 0, 'B'] のような条件付き抽出と df.iloc[df['A'] > 0, 0] の組み合わせは、意味が似ていても動作が異なる場合があり誤解の原因になります。
この章の結論としては、ilocは位置ベースのアクセス、locはラベルベースのアクセスという基本認識を常に心がけ、データの性質に応じて使い分けることが肝心です。ここまでの要点を押さえたら、次の章で実際の使い分けを具体的な例とともに確認します。
基本の違いを分かりやすく整理
このセクションでは iloc と loc の基本の違いを、具体例を使って整理します。まず前提としてilocは位置ベース、locはラベルベースという点を強調します。データの行が数字の番号で並んでいれば iloc が自然です。反対に index が名前で並ぶ場合には loc の方が直感的で読みやすいコードになります。実際のコード例では df.iloc[1,2] が 2 行目の 3 列を指す一方、 df.loc[1, column3] は index ラベルが 1 の行の column3 列を指します。ここで大切なのは、行と列の両方を同時に指定する場合、左右で意味が揃っていることを意識することです。
また、スライスの端の扱いにも差があり、iloc は end を含まないケースが多いのに対し、loc は end を含むケースが多いです。これを混同するとデータの一部が欠けたり余分に含まれたりして、分析結果がずれてしまいます。ラベルと位置の両方を確認する癖をつけ、可能なら df.index と df.columns を使ってデータの構造を図に落として理解すると理解が深まります。さらに実務で頻出するのは選択の組み合わせです。特定の行の範囲を取り出す場合、iloc では位置、loc ではラベルを使うという二つの視点を持つことが重要です。これらの点を押さえるだけで、コードの意味が明確になり、後で見直すときにも理解しやすくなります。
実務での使い分けのコツ
実務では読みやすさ・保守性・再現性を考えて使い分けることが重要です。たとえばデータの行の意味が index 名で決まっている場合は loc を用いた方が後から読んだときに理解しやすくなります。逆に生データの並び順が重要で、インデックスが連番で付いている時は iloc が自然です。コーディング規約としては、まず df.loc を使って目的の行と列を取り出し、必要に応じて df.iloc へ置き換えるという戦略が無難です。さらにエラーハンドリングとして、ラベルが存在しない場合は KeyError、位置が範囲外なら IndexError が発生します。これらのエラーを事前に避けるには、事前に df.index と df.columns を確認した上で場所を決めるか、存在を確認する条件を足すとよいです。連続的なスライスには特に注意が必要で、loc の end - to - end の挙動を確かめずに固定長のスライスを想定すると、思わぬデータが返ってきたり誤った集計結果につながることがあります。実務の現場ではデータの性質に応じてどちらを使うべきかを判断する能力が求められます。最後に、効果的なデバッグのコツとして、最初に小さなサブセットを取り出して動作を確認し、徐々に範囲を広げていく方法を推奨します。こうした手順を踏むことで、ilocとlocの混同によるミスを減らすことができ、分析の信頼性が高まります。
ある日友達とデータの整理をしていて、ilocとlocの違いを雑談風に話す場面を想像してみてください。僕らはまず iloc が位置ベースで動くと覚え、次に loc がラベルベースだと理解します。成績表の例で言えば、行の番号が 0,1,2 で列の名前が 成績, 欠席数 なら、iloc なら 0 行 1 列を取り出すには 0,1 を使い、loc なら 0 行の 欠席数 を取り出すには index 名と列名を使います。話しているうちに、数据の順番が崩れているとき iloc では end が含まれず、loc では end を含むことがあると知って混乱が生まれます。結局、データによってどちらを使うかを決めるけれど、コードの読みやすさや将来の修正のしやすさを考えると、まず loc で意図を明確にしてから必要に応じて iloc に落とすのが安全策だと感じました。こうして日常のデータ整理が少しずつスムーズになっていくのです。