In [1]: import pandas as pd
- タイタニック号のデータ
このチュートリアルでは、CSV 形式で保存されたタイタニック号のデータセットを使用します。データは以下のデータ列で構成されています。
PassengerId: 各乗客の ID。
Survived: 乗客が生存したかどうかを示す指標。
0
が生存、1
が死亡。Pclass: 3 つの乗船クラスのいずれか。クラス
1
、クラス2
、クラス3
。Name: 乗客の名前。
Sex: 乗客の性別。
Age: 乗客の年齢(年単位)。
SibSp: 同乗している兄弟姉妹または配偶者の数。
Parch: 同乗している親または子供の数。
Ticket: 乗客のチケット番号。
Fare: 運賃を示す。
Cabin: 乗客のキャビン番号。
Embarked: 乗船港。
In [2]: titanic = pd.read_csv("data/titanic.csv") In [3]: titanic.head() Out[3]: PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 1 2 1 1 ... 71.2833 C85 C 2 3 1 3 ... 7.9250 NaN S 3 4 1 1 ... 53.1000 C123 S 4 5 0 3 ... 8.0500 NaN S [5 rows x 12 columns]
DataFrame
のサブセットを選択するにはどうすればよいですか?#
DataFrame
から特定の列を選択するにはどうすればよいですか?#
タイタニック号の乗客の年齢に興味があります。
In [4]: ages = titanic["Age"] In [5]: ages.head() Out[5]: 0 22.0 1 38.0 2 26.0 3 35.0 4 35.0 Name: Age, dtype: float64
単一の列を選択するには、対象の列の列名で角括弧
[]
を使用します。
DataFrame
の各列は Series
です。単一の列が選択されているため、返されるオブジェクトは pandas の Series
です。出力の型を調べることで、これを検証できます。
In [6]: type(titanic["Age"])
Out[6]: pandas.core.series.Series
また、出力の shape
を確認します。
In [7]: titanic["Age"].shape
Out[7]: (891,)
DataFrame.shape
は、pandas の Series
および DataFrame
の属性であり(読み書きに関するチュートリアル を思い出してください。属性には括弧を使用しません)、行数と列数:(nrows, ncolumns) が含まれています。pandas の Series は 1 次元であり、行数のみが返されます。
タイタニック号の乗客の年齢と性別に興味があります。
In [8]: age_sex = titanic[["Age", "Sex"]] In [9]: age_sex.head() Out[9]: Age Sex 0 22.0 male 1 38.0 female 2 26.0 female 3 35.0 female 4 35.0 male
複数の列を選択するには、選択角括弧
[]
内に列名のリストを使用します。
注意
内側の角括弧は列名の Python リスト を定義します。一方、外側の括弧は、前の例で見たように、pandas の DataFrame
からデータを選択するために使用されます。
返されるデータ型は pandas の DataFrame です。
In [10]: type(titanic[["Age", "Sex"]])
Out[10]: pandas.core.frame.DataFrame
In [11]: titanic[["Age", "Sex"]].shape
Out[11]: (891, 2)
選択によって、891 行と 2 列の DataFrame
が返されました。 DataFrame
は行と列の両方の次元を持つ 2 次元であることを思い出してください。
インデックス付けに関する基本情報については、データのインデックス付けと選択に関するユーザーガイドのセクションを参照してください。
DataFrame
から特定の行をフィルタリングするにはどうすればよいですか?#
35 歳以上の乗客に興味があります。
In [12]: above_35 = titanic[titanic["Age"] > 35] In [13]: above_35.head() Out[13]: PassengerId Survived Pclass ... Fare Cabin Embarked 1 2 1 1 ... 71.2833 C85 C 6 7 0 1 ... 51.8625 E46 S 11 12 1 1 ... 26.5500 C103 S 13 14 0 3 ... 31.2750 NaN S 15 16 1 2 ... 16.0000 NaN S [5 rows x 12 columns]
条件式に基づいて行を選択するには、選択角括弧
[]
内に条件を使用します。
選択角括弧 titanic["Age"] > 35
内の条件は、Age
列の値が 35 より大きい行を確認します。
In [14]: titanic["Age"] > 35
Out[14]:
0 False
1 True
2 False
3 False
4 False
...
886 False
887 False
888 False
889 False
890 False
Name: Age, Length: 891, dtype: bool
条件式の出力(>
、ただし ==
、!=
、<
、<=
なども機能します)は、実際には、元の DataFrame
と同じ行数のブール値(True
または False
)の pandas の Series
です。このようなブール値の Series
は、選択角括弧 []
の間に配置することで、DataFrame
をフィルタリングするために使用できます。値が True
である行のみが選択されます。
元のタイタニック号の DataFrame
は 891 行で構成されていることを以前から知っています。結果の DataFrame
above_35
の shape
属性を確認して、条件を満たす行の数を見てみましょう。
In [15]: above_35.shape
Out[15]: (217, 12)
キャビンクラス 2 と 3 のタイタニック号の乗客に興味があります。
In [16]: class_23 = titanic[titanic["Pclass"].isin([2, 3])] In [17]: class_23.head() Out[17]: PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 2 3 1 3 ... 7.9250 NaN S 4 5 0 3 ... 8.0500 NaN S 5 6 0 3 ... 8.4583 NaN Q 7 8 0 3 ... 21.0750 NaN S [5 rows x 12 columns]
条件式と同様に、
isin()
条件付き関数は、値が指定されたリストにある各行に対してTrue
を返します。このような関数に基づいて行をフィルタリングするには、選択角括弧[]
内に条件付き関数を使用します。この場合、選択角括弧titanic["Pclass"].isin([2, 3])
内の条件は、Pclass
列が 2 または 3 である行を確認します。
上記は、クラスが 2 または 3 である行でフィルタリングし、2 つのステートメントを |
(または)演算子で結合するのと同じです。
In [18]: class_23 = titanic[(titanic["Pclass"] == 2) | (titanic["Pclass"] == 3)]
In [19]: class_23.head()
Out[19]:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
2 3 1 3 ... 7.9250 NaN S
4 5 0 3 ... 8.0500 NaN S
5 6 0 3 ... 8.4583 NaN Q
7 8 0 3 ... 21.0750 NaN S
[5 rows x 12 columns]
注意
複数の条件ステートメントを結合する場合は、各条件を括弧 ()
で囲む必要があります。さらに、or
/and
は使用できず、or
演算子 |
および and
演算子 &
を使用する必要があります。
ブールインデックス付けに関するユーザーガイドの専用セクション、またはisin関数を参照してください。
年齢がわかっている乗客のデータを操作したいと考えています。
In [20]: age_no_na = titanic[titanic["Age"].notna()] In [21]: age_no_na.head() Out[21]: PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 1 2 1 1 ... 71.2833 C85 C 2 3 1 3 ... 7.9250 NaN S 3 4 1 1 ... 53.1000 C123 S 4 5 0 3 ... 8.0500 NaN S [5 rows x 12 columns]
notna()
条件付き関数は、値がNull
値ではない各行に対してTrue
を返します。そのため、選択角括弧[]
と組み合わせてデータテーブルをフィルタリングできます。
最初の 5 行はまだ同じ値であるため、実際何が変わったのだろうと思うかもしれません。確認する方法の 1 つは、shape が変更されたかどうかを確認することです。
In [22]: age_no_na.shape
Out[22]: (714, 12)
欠損値に関するより専門的な関数については、欠損データの処理に関するユーザーガイドのセクションを参照してください。
DataFrame
から特定の行と列を選択するにはどうすればよいですか?#
35 歳以上の乗客の名前に興味があります。
In [23]: adult_names = titanic.loc[titanic["Age"] > 35, "Name"] In [24]: adult_names.head() Out[24]: 1 Cumings, Mrs. John Bradley (Florence Briggs Th... 6 McCarthy, Mr. Timothy J 11 Bonnell, Miss. Elizabeth 13 Andersson, Mr. Anders Johan 15 Hewlett, Mrs. (Mary D Kingcome) Name: Name, dtype: object
この場合、行と列の両方のサブセットが一度に作成され、選択角括弧
[]
だけを使用するのでは十分ではありません。選択角括弧[]
の前にloc
/iloc
演算子が必要です。loc
/iloc
を使用する場合、コンマの前は選択したい行、コンマの後ろは選択したい列です。
列名、行ラベル、または条件式を使用する場合は、選択ブラケット []
の前に loc
演算子を使用します。カンマの前後の両方の部分で、単一のラベル、ラベルのリスト、ラベルのスライス、条件式、またはコロンを使用できます。コロンを使用すると、すべての行または列を選択することを指定します。
10行目から25行目までと、3列目から5列目までに関心があります。
In [25]: titanic.iloc[9:25, 2:5] Out[25]: Pclass Name Sex 9 2 Nasser, Mrs. Nicholas (Adele Achem) female 10 3 Sandstrom, Miss. Marguerite Rut female 11 1 Bonnell, Miss. Elizabeth female 12 3 Saundercock, Mr. William Henry male 13 3 Andersson, Mr. Anders Johan male .. ... ... ... 20 2 Fynney, Mr. Joseph J male 21 2 Beesley, Mr. Lawrence male 22 3 McGowan, Miss. Anna "Annie" female 23 1 Sloper, Mr. William Thompson male 24 3 Palsson, Miss. Torborg Danira female [16 rows x 3 columns]
ここでも、行と列の両方のサブセットが一度に作成され、選択ブラケット
[]
を使用するだけでは不十分です。テーブル内の位置に基づいて特定の行や列に関心がある場合は、選択ブラケット[]
の前にiloc
演算子を使用します。
loc
または iloc
を使用して特定の行や列を選択する場合、選択したデータに新しい値を割り当てることができます。たとえば、4列目の最初の3つの要素に名前 anonymous
を割り当てるには、次のようにします。
In [26]: titanic.iloc[0:3, 3] = "anonymous"
In [27]: titanic.head()
Out[27]:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
[5 rows x 12 columns]
loc
および iloc
の使用方法について詳しく知るには、ユーザーガイドのインデックス作成のさまざまな選択肢に関するセクションを参照してください。
覚えておいてください
データのサブセットを選択する場合は、角かっこ
[]
が使用されます。これらの角かっこ内では、単一の列/行ラベル、列/行ラベルのリスト、ラベルのスライス、条件式、またはコロンを使用できます。
行と列の名前を使用する場合は、
loc
を使用して特定の行や列を選択します。テーブル内の位置を使用する場合は、
iloc
を使用して特定の行や列を選択します。loc
/iloc
に基づいて選択したデータに新しい値を割り当てることができます。
インデックス作成の完全な概要は、インデックス作成とデータの選択に関するユーザーガイドページで提供されています。