pandasの最初の一歩|文系がつまずく5つのポイントと対処法

pandasは、Pythonでデータ分析をするなら避けて通れないライブラリです。 一方で、文系がPythonの学習で最初に本格的につまずくのもこのpandasです。 この記事では、初心者が必ずと言っていいほど引っかかる5つのポイントを、対処法とあわせて先回りで潰しておきます。

環境はインストール不要のGoogle Colabを前提にします。 Colabにはpandasが最初から入っているので、import pandas as pd だけで使い始められます。

つまずき1:DataFrameとSeriesの違いがわからない

pandasには、よく似た2つの入れ物があります。

  • DataFrame:表全体(Excelのシート1枚に相当)
  • Series:1列分のデータ(Excelの1列に相当)

DataFrameから1列を取り出すとSeriesになる、という関係です。

import pandas as pd
df = pd.read_csv("data.csv")  # これはDataFrame(表全体)
uriage = df["売上"]            # これはSeries(1列)

最初は「表がDataFrame、1列がSeries」とだけ覚えれば足ります。 エラーメッセージにこの2つの単語が出てきたとき、自分が今どちらを触っているかを意識するだけで、原因が見えやすくなります。

つまずき2:行を選ぶのか列を選ぶのかで書き方が違う

pandasでは、列を選ぶときと行を選ぶときで書き方が変わります。 ここが初心者の混乱の最大の原因です。

df["売上"]              # 列を選ぶ(列名を指定)
df[df["売上"] > 100]    # 行を選ぶ(条件を指定)

列は名前で、行は条件で選ぶ、と役割で覚えると整理できます。 「特定の行の特定の列」をピンポイントで指定したいときは df.loc[行の条件, 列名] を使いますが、これは上の2つに慣れてからで構いません。

つまずき3:日本語の列名でエラーが出る

実務のデータは列名が日本語のことが多く、これがトラブルの元になります。 特に、列名の前後に気づかない空白が入っていると、df["売上"] としても「そんな列はない」というエラーになります。

対処は、まず列名を確認することです。

print(df.columns)  # 実際の列名を一覧表示する

表示された列名をそのままコピーして使えば、空白や全角半角の違いによるミスを避けられます。 「列がないと言われたら、まずcolumnsを見る」を癖にしてください。

つまずき4:SettingWithCopyWarningという警告が出る

データの一部を書き換えようとすると、SettingWithCopyWarning という警告が出ることがあります。 エラーで止まるわけではないので無視しがちですが、意図せず元データが書き換わらない原因になります。

これは「表の一部のコピーを触っているのか、元の表そのものを触っているのか」が曖昧なときに出る警告です。 初心者のうちは、値を書き換えるときに .loc を使うと回避できます。

# 警告が出やすい書き方
df[df["売上"] > 100]["ランク"] = "A"

# .loc を使う書き方
df.loc[df["売上"] > 100, "ランク"] = "A"

理屈を完全に理解するのは後回しでよいので、まず「書き換えるときは .loc」と手順で覚えておくと安全です。

つまずき5:欠損値(NaN)の扱いに戸惑う

実務のデータには、空欄がつきものです。 pandasは空欄を NaN(Not a Number)として読み込みます。

NaNが含まれると、合計や平均が意図しない結果になったり、条件で絞るときに引っかかったりします。 まずは、どこにいくつ欠損があるかを確認する習慣をつけてください。

print(df.isna().sum())  # 列ごとの欠損の数を表示する

そのうえで、欠損をどう扱うか(行ごと除く、0で埋める、平均で埋める、など)を分析の目的に応じて選びます。 「欠損はまず数える、処理は目的次第」という順序を覚えておけば、判断に迷いにくくなります。

つまずいたときの共通の構え

5つのポイントに共通するのは、「エラーや警告が出たら、まず今のデータの状態を確認する」という構えです。

  • 列名がわからない → df.columns
  • データの中身を見たい → df.head()
  • 欠損を知りたい → df.isna().sum()

書いたコードをにらんで悩むより、データの現状を表示させたほうが原因に早くたどり着けます。 これはExcelでセルを目視で確認するのと同じ動作を、コードでやっているだけです。

まとめ

  • DataFrame(表全体)とSeries(1列)の違いをまず押さえる
  • 列は名前で、行は条件で選ぶ。ピンポイント指定は .loc
  • 「列がない」と言われたら df.columns、書き換えは .loc、欠損は df.isna().sum() で数える
  • 困ったらコードをにらむ前にデータの状態を表示する。学習全体の流れはPython独学ロードマップを参照