pandas DataFrame の操作の基本、つまり強力なデータ操作ライブラリである pandas の基本データ構造を学びます。
Python でデータ分析を始めたい場合、pandas は操作方法を学ぶべき最初のライブラリの 1 つです。 CSV ファイルやデータベースなどの複数のソースからのデータのインポートから、欠落したデータの処理、分析による洞察の取得まで、パンダなら上記のすべてを実行できます。
pandas でデータ分析を開始するには、pandas の基本的なデータ構造である データ フレーム を理解する必要があります。
このチュートリアルでは、pandas データフレームの基本とデータフレームを作成する一般的な方法を学びます。次に、データのサブセットを取得するためにデータフレームから行と列を選択する方法を学びます。
以上のことをすべて始めましょう。
パンダのインストールとインポート
pandas はサードパーティのデータ分析ライブラリであるため、最初にインストールする必要があります。プロジェクトの仮想環境に外部パッケージをインストールすることをお勧めします。
Python の Anaconda ディストリビューション
を使用する場合は、パッケージ管理に
conda
を使用できます。
conda install pandas
pip を使用してパンダをインストールすることもできます。
pip install pandas
⚙ pandas ライブラリには依存関係として NumPy が必要です。したがって、NumPy がまだインストールされていない場合は、インストール プロセス中にインストールされます。
pandas をインストールしたら、作業環境にインポートできます。一般に、パンダはエイリアス
pd
でインポートされます。
import pandas as pd
Pandas の DataFrame とは何ですか?

pandas の基本的なデータ構造は データ フレーム です。データ フレームは、ラベル 付き インデックスと 名前付き 列を持つデータの 2 次元配列です。 pandas シリーズ と呼ばれるデータ フレーム内の各列は、共通のインデックスを共有します。
これは、今後数分間で最初から作成するデータ フレームの例です。このデータ フレームには、6 人の学生が 4 週間でどれくらいの費用を費やしたかに関するデータが含まれています。

生徒の名前が行ラベルです。そして、列には「Week1」から「Week4」という名前が付けられます。すべての列が、 インデックス とも呼ばれる同じ行ラベルのセットを共有していることに注意してください。
Pandas データフレームを作成する方法
pandas データ フレームを作成するにはいくつかの方法があります。このチュートリアルでは、次の方法について説明します。
- NumPy 配列からデータ フレームを作成する
- Python 辞書からデータ フレームを作成する
- CSVファイルを読み込んでデータフレームを作成する
NumPy 配列から
NumPy 配列からデータ フレームを作成しましょう。
特定の週に各生徒が 0 ドルから 100 ドルの間で支出すると仮定して、形状 (6,4) のデータ配列を作成しましょう。 NumPy の
random
モジュールの
randint()
関数は、指定された間隔
[low,high)
でランダムな整数の配列を返します。
import numpy as np
np.random.seed(42)
data = np.random.randint(0,101,(6,4))
print(data)
array([[51, 92, 14, 71],
[60, 20, 82, 86],
[74, 74, 87, 99],
[23, 2, 21, 52],
[ 1, 87, 29, 37],
[ 1, 63, 59, 20]])
pandas データ フレームを作成するには、次に示すように、
DataFrame
コンストラクターを使用し、NumPy 配列を
data
引数として渡すことができます。
students_df = pd.DataFrame(data=data)
これで、組み込みの
type()
関数を呼び出して、
students_df
の型を確認できるようになりました。これは
DataFrame
オブジェクトであることがわかります。
type(students_df)
# pandas.core.frame.DataFrame
print(students_df)

デフォルトでは、0 から
numRows
– 1 までの範囲インデックスがあり、列ラベルは 0、1、2、…、
numCols
-1 であることがわかります。ただし、これにより可読性が低下します。説明的な列名と行ラベルをデータ フレームに追加すると役立ちます。
2 つのリストを作成しましょう。1 つは生徒の名前を保存するリストで、もう 1 つは列ラベルを保存するリストです。
students = ['Amy','Bob','Chris','Dave','Evelyn','Fanny']
cols = ['Week1','Week2','Week3','Week4']
DataFrame
コンストラクターを呼び出すときに、使用する行ラベルと列ラベルのリストに
index
と
columns
それぞれ設定できます。
students_df = pd.DataFrame(data = data,index = students,columns = cols)
これで、説明的な行ラベルと列ラベルが付いた
students_df
データ フレームが完成しました。
print(students_df)

欠損値やデータ型など、データ フレームに関する基本情報を取得するには、データ フレーム オブジェクトの
info()
メソッドを呼び出します。
students_df.info()

Python 辞書から
Python 辞書から pandas データ フレームを作成することもできます。
ここで、
data_dict
生徒データを含む辞書です。
- 生徒の名前が鍵となります。
- それぞれの値は、各生徒が第 1 週から第 4 週までに費やした金額のリストです。
data_dict = {}
students = ['Amy','Bob','Chris','Dave','Evelyn','Fanny']
for student,student_data in zip(students,data):
data_dict[student] = student_data
Python 辞書からデータ フレームを作成するには、以下に示すように
from_dict
使用します。最初の引数は、データを含む辞書 (
data_dict
) に対応します。デフォルトでは、キーはデータ フレームの
列名
として使用されます。キーを
行ラベル
として設定したいので、
orient= 'index'
を設定します。
students_df = pd.DataFrame.from_dict(data_dict,orient='index')
print(students_df)

列名を週番号に変更するには、列を
cols
リストに設定します。
students_df = pd.DataFrame.from_dict(data_dict,orient='index',columns=cols)
print(students_df)

CSV ファイルを Pandas DataFrame に読み込みます
学生データが CSV ファイルとして利用できるとします。
read_csv()
関数を使用して、ファイルから pandas データ フレームにデータを読み取ることができます。
pd.read_csv('file-path')
一般的な構文で、
file-path
は CSV ファイルへのパスです。
names
パラメータを使用する列名のリストに設定できます。
students_df = pd.read_csv('/content/students.csv',names=cols)
データ フレームの作成方法がわかったので、次は行と列を選択する方法を学びましょう。
Pandas DataFrame から列を選択する
データ フレームから行と列を選択するために使用できる組み込みメソッドがいくつかあります。このチュートリアルでは、データ フレームから列、行、および行と列の両方を選択する最も一般的な方法について説明します。
単一列の選択
単一の列を選択するには、
df_name[col_name]
を使用できます。ここで、
col_name
は列の名前を示す文字列です。
ここでは、「Week1」列のみを選択します。
week1_df = students_df['Week1']
print(week1_df)

複数の列の選択
データ フレームから複数の列を選択するには、選択するすべての列名のリストを渡します。
odd_weeks = students_df[['Week1','Week3']]
print(odd_weeks)

このメソッドに加えて、
iloc()
メソッドと
loc()
メソッドを使用して列を選択することもできます。後でサンプルをコーディングします。
Pandas DataFrame から行を選択する

.iloc() メソッドの使用
iloc()
メソッドを使用して行を選択するには、すべての行に対応するインデックスをリストとして渡します。
この例では、奇数のインデックスにある行を選択します。
odd_index_rows = students_df.iloc[[1,3,5]]
print(odd_index_rows)

次に、インデックス 0 ~ 2 の行を含むデータ フレームのサブセットを選択します。エンドポイント 3 はデフォルトで除外されます。
slice1 = students_df.iloc[0:3]
print(slice1)

.loc() メソッドの使用
loc()
メソッドを使用してデータ フレームの行を選択するには、選択する行に対応するラベルを指定する必要があります。
some_rows = students_df.loc[['Bob','Dave','Fanny']]
print(some_rows)

データ フレームの行がデフォルト範囲 0、1、2 から
numRows
-1 までを使用してインデックス付けされている場合、iloc()
とloc()
の使用はどちらも同等です。
Pandas DataFrame から行と列を選択する
ここまでは、pandas データ フレームから行または列を選択する方法を学習しました。ただし、行と列の
両方の
サブセットを選択する必要がある場合があります。それで、どうやってやるのですか?これまでに説明した
iloc()
メソッドと
loc()
メソッドを使用できます。
たとえば、以下のコード スニペットでは、インデックス 2 と 3 にある すべての 行と列を選択します。
subset_df1 = students_df.iloc[:,[2,3]]
print(subset_df1)

start:stop
を使用すると、
start
から stop までのスライスが作成されますが、
stop
含まれません。したがって、
start
と
stop
値の両方を無視すると、スライスは先頭から始まり、データ フレームの終わりまで拡張され、
すべての
行が選択されます。
loc()
メソッドを使用する場合は、次のように、選択する行と列のラベルを渡す必要があります。
subset_df2 = students_df.loc[['Amy','Evelyn'],['Week1','Week3']]
print(subset_df2)

ここで、データフレーム
subset_df2
は、Week1 と Week3 の Amy と Evelyn のレコードが含まれています。
結論
このチュートリアルで学んだ内容を簡単に復習します。
-
pandas をインストールした後、エイリアス
pd
でインポートできます。 pandas データ フレーム オブジェクトを作成するには、pd.DataFrame(data)
コンストラクターを使用できます。ここで、data
N 次元配列、またはデータを含む反復可能オブジェクトを参照します。 オプションの インデックスパラメータと列パラメータをそれぞれ設定することで、行とインデックス、および列ラベルを指定できます。 -
pd.read_csv(path-to-the-file)
を使用すると、ファイルの内容がデータ フレームに読み込まれます。 -
データ フレーム オブジェクトの
info()
メソッドを呼び出して、列、欠損値の数、データ型、およびデータ フレームのサイズに関する情報を取得できます。 -
単一の列を選択するには
df_name[col_name]
を使用し、複数の列 (特定の列) を選択するにはdf_name[[col1,col2,...,coln]]
。 -
loc()
メソッドとiloc()
メソッドを使用して列と行を選択することもできます。 -
iloc()
メソッドは選択する行と列のインデックス (またはインデックス スライス) を受け取りますが、loc()
メソッドは行と列のラベルを受け取ります。
このチュートリアルで使用されている例は 、この Colab ノートブック にあります。
次に、コラボレーション用データ サイエンス ノートブックのリストをチェックしてください。