pandasのインストールと初めての表
pandasはPython本体には含まれていません。仮想環境の作成、pipによるインストールと動作確認、そして手動で初めてのDataFrameを構築する手順を学びます。
どうやって学びますか?
解決する問題
ある店舗の3か月分の売上データがCSVファイルに保存されています。行数は1万2000行です。知りたいことはシンプルです。「最も売れた商品はどれか?」
すでに身につけたPythonの知識だけでも処理することはできます。ファイルを開き、各行を読み込み、カンマで分割し、数値に変換して、1つずつ足し合わせていきます。40行ほどのコードになり、どのステップでもミスをする可能性があります。
pandasを使えば、わずか2行です。なぜなら、pandasはこれまでのPythonになかったもの、つまり表(テーブル)をもたらしてくれるからです。行と列からなるグリッド全体が1つの値として保持され、合算、フィルタリング、並べ替えがそれぞれ1つの操作で完結します。
ただし、最初に明確にしておくべきことがあります。print、len、inputはPython本体に最初から付属しています。しかしpandasはそうではありません。別途インストールする必要があり、それがどこにインストールされるのかを正確に理解していないと、初日から原因のわかりにくいエラーに行き詰まることになります。
この章を終える頃には
- Python標準のライブラリと外部パッケージの違いを説明できるようになる
- プロジェクト用の仮想環境を作成し、アクティベートできるようになる
pipを使ってpandasをインストールし、そのバージョンを確認できるようになる- 初めての
DataFrameを手動で構築して出力できるようになる ModuleNotFoundErrorを読み解き、何が問題だったのかを正確に特定できるようになる
前提条件: Pythonコースのターミナル、フォルダ、そして最初のプロジェクト、および変数と型。
pandasはPythonの一部ではない
Pythonに同梱されているものは標準ライブラリと呼ばれます。print、len、math、randomはすべてそこに属しています。しかしpandasは含まれていません。pandasは、他の開発者たちによって作成され、PyPIと呼ばれるリポジトリに公開されている外部パッケージです。
それを取得するためのツールがpipであり、こちらはPythonに同梱されています。
そしてここで最初の疑問が生じます。これを見過ごすと後でトラブルの原因になる疑問です。それは、どこにインストールされるのか?という点です。
なぜ仮想環境が必要なのか
pip install pandasと入力すると、pandasはマシン全体のPythonに配置されます。プロジェクトが1つだけなら、それでも動作します。しかし半年後、2つ目のプロジェクトで異なるバージョンのpandasが必要になったとき、両者は同じ場所を奪い合うことになります。そして、一方を直そうとするともう一方が壊れてしまいます。
その解決策が、プロジェクトごとに個別の部屋を用意すること、すなわち仮想環境です。仮想環境の実体は、プロジェクト内に置かれ、そのプロジェクトのパッケージを保持するごく普通のフォルダにすぎません。プロジェクトを削除すればパッケージも一緒に消え、マシンのメインのPythonはクリーンなまま保たれます。
ターミナルで、プロジェクト用のフォルダに移動して以下を実行します:
cd D:\python-lab
mkdir pandas-lab
cd pandas-lab
python -m venv .venv次に、アクティベートします:
.venv\Scripts\activateアクティベートされると、プロンプトの先頭にその部屋の名前が表示されます:
(.venv) PS D:\python-lab\pandas-lab>この(.venv)こそがすべてです。 これが表示されていない場合、仮想環境の外にいることになり、pip installはパッケージを別の場所に配置してしまいます。新しいターミナルを開くたびに、改めてactivateを実行する必要があります。一度設定すれば終わりというものではありません。
もしPowerShellでスクリプトの実行が無効になっているというエラーが表示された場合は、これを一度だけ実行してください:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned仮想環境から抜けるには、deactivateと入力します。
インストールして確認する
pip install pandas数秒後、Successfully installed ...と表示されて完了します。pandasと一緒にNumPyもダウンロードされたことに注目してください。pandasは内部でNumPyを利用しており、pipがそうした依存関係を自動的に解決してくれます。
では確認してみましょう。check.pyというファイルを作成します:
import pandas as pd
print(pd.__version__)2.2.3表示されるバージョン番号は異なっていても問題ありません。重要なのは、バージョン番号が出力されたことそのものです。これはPythonがpandasを見つけられたことを意味します。
このimport pandas as pdという行について2点注意があります。import pandasはpandasを取り込み、as pdはそれに短い名前を付けます。pdという名前は必須ではありませんが、世界中のほぼすべてのpandasコードでこの名前が使われています。そのため、それ以外の名前を使うと他の人にとってコードが読みづらくなります。この慣例に従いましょう。
完全な例
first_frame.py:
import pandas as pd
# A DataFrame from a dictionary: each key is a column name,
# each list is that column's values, top to bottom.
sales = pd.DataFrame({
"product": ["pen", "notebook", "bag"],
"quantity": [12, 5, 2],
"price": [15.0, 60.0, 850.0],
})
print(sales)product quantity price
0 pen 12 15.0
1 notebook 5 60.0
2 bag 2 850.0出力された内容をよく見てください。この先の章では、そのすべての部分が重要になってきます。
上部に並んでいるのが列名です — product、quantity、price。左端に並んでいるのが0、1、2です。これらは列ではありません。行の名前であるインデックスです。辞書には書いていませんが、pandasが0から数えて自動的に補ってくれたものです。
また、price列の15.0にも注目してください。15.0と書いたため、850.0は整数になり得たにもかかわらず、列全体が小数として出力されています。1つの列に含まれるすべての値は1つの型を共有します。これはpandasにおける中心的なルールであり、次の章の主要なテーマでもあります。
表が手に入れば、そこから情報を取得するのは簡単です:
import pandas as pd
sales = pd.DataFrame({
"product": ["pen", "notebook", "bag"],
"quantity": [12, 5, 2],
"price": [15.0, 60.0, 850.0],
})
print(sales.shape)
print(sales["quantity"].sum())(3, 3)
19shapeは表の大きさを行数、列数の順で報告します — 3行3列です。そしてsales["quantity"].sum()は、1つの列にあるすべての値を足し合わせます。1万2000行あったとしてもこの行はまったく同じであり、これこそがpandasを学ぶ最大の理由です。
問題が起きたとき
ModuleNotFoundError: No module named 'pandas' Pythonがpandasを見つけられませんでした。ほとんどの場合、インストールされた場所とプログラムを実行している場所が一致していないことを意味します。プロンプトに(.venv)が表示されているか確認してください。もし表示されていなければ、activateを実行してから再度実行します。仮想環境がアクティブになっていれば、pip listを実行することでpandasが実際に存在するかどうかを確認できます。
'pip' is not recognized as an internal or external command pipがPATHに登録されていません。代わりにpython -m pip install pandasと記述してください。これにより、現在実行中のPythonを経由してpipが呼び出されるため、PATHの設定がなくても動作し、どのPythonにインストールされているのか迷う余地がなくなります。
.venv\Scripts\activate : File cannot be loaded because running scripts is disabled PowerShellのセキュリティポリシーによるものです。Set-ExecutionPolicy -Scope CurrentUser RemoteSignedを一度実行し、新しいターミナルでやり直してください。
すべて正常に動くのに、エディタに赤色の波線が表示される エディタが別のPythonを参照している可能性があります。VS Codeでは、Ctrl + Shift + P → Python: Select Interpreter → プロジェクトの.venv内にあるPythonを選択します。ターミナルでプログラムが実行できるなら、コードに問題はありません。赤い波線はエディタの思い違いです。
DataFrameと書いたときにNameErrorが発生する 単にDataFrameと書くのではなく、pd.DataFrameとする必要があります。import pandas as pdはライブラリ全体をpdという名前で取り込むため、その中にあるすべての要素にはpd.を経由してアクセスします。
ステップ 4 / 6 — 予想する
理解度をチェック
shapeは何を出力しますか?また、2つの数値はどのような順序ですか?
import pandas as pd
sales = pd.DataFrame({
"product": ["pen", "notebook", "bag"],
"quantity": [12, 5, 2],
"price": [15.0, 60.0, 850.0],
})
print(sales.shape)- A(3, 4)
- B(3, 3)
- C3 rows, 3 columns
- D(3,)
プロンプトの先頭に(.venv)が表示されていることは何を意味しますか?
- APythonが特別なセーフモードで動作している
- B`.venv`というフォルダの中にいる
- Cこのターミナルで仮想環境がアクティブになっている — `pip install`を実行するとこのプロジェクトの部屋にインストールされる
- Dpandasのインストールが完了した
pip install pandasは成功したのに、翌日、新しいターミナルで同じファイルを実行するとModuleNotFoundError: No module named 'pandas'と表示されました。最も可能性の高い原因は何ですか?
- A実際にはインストールが失敗していた
- Bマシンをシャットダウンするとインストールされたパッケージが消去される
- Cファイルに`import pandas as pd`ではなく`import pandas`と記述されている
- D新しいターミナルで仮想環境がアクティベートされていないため、pandasが存在しない別のPythonが実行されている
回答にはアカウントが必要です
ログインして答えを確認
問題は上にあります。頭の中で答えを考えることがいちばん大切です。ログインすると、正解・解説・3 段階のヒントを確認できます。
やってみよう
新しいフォルダを作成し、その中に自分で仮想環境を作ってpandasをインストールしてください。その上で、以下の内容を含むstock.pyというファイルを作成します:
- 4つ以上の商品と3つの列(テキストが1列、整数が1列、小数が1列)を持つ
DataFrame - 表全体を出力する処理
- 行数と列数を示す
shapeを出力する処理 - 両方の数値列の合計を出力する処理
その後、わざとエラーを起こしてみましょう。ターミナルでdeactivateと入力して仮想環境から抜け出し、もう一度ファイルを実行します。どのエラーが表示され、それは具体的に何を伝えているでしょうか?
この最後のステップを飛ばさないでください。これから先、ModuleNotFoundErrorには何度も遭遇することになります。今日あえて意図的にこのエラーを出しておくことで、次回からは1秒で原因を見抜けるようになります。