Pandas 超入門2
本記事は Pandas 超入門1 の続きです。Colaboratory での実行を想定しています。 準備はこちらを参照ください。
Contents
テーブル操作
ここでは、テーブルデータから情報を得るために用いられる基本的な操作方法について一部を紹介します。
前準備としてアンスコムのデータを読み込んでおきます。
anscombe = pd.read_json('./sample_data/anscombe.json')
DataFrame の中身を確認する
アンスコムのデータをつかってDataFrame
の確認・抽出を行います。
# typeの確認する
type(anscombe)
pandas.core.frame.DataFrame
pandas の DataFrame 型だということがわかりました。次にデータの冒頭だけを確認します。
# データの冒頭だけを確認する
anscombe.head()
Series X Y
0 I 10 8.04
1 I 8 6.95
2 I 13 7.58
3 I 9 8.81
4 I 11 8.33
DataFrame のカラム名を確認します。
# DataFrameのカラム名を確認する
anscombe.columns
Index(['Series', 'X', 'Y'], dtype='object')
DataFrame の詳細については info
関数で確認することができます。
# DataFrameに関する情報を確認する
anscombe.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 44 entries, 0 to 43
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Series 44 non-null object
1 X 44 non-null int64
2 Y 44 non-null float64
dtypes: float64(1), int64(1), object(1)
memory usage: 1.2+ KB
いままで見てきた通り、カラムは3種類あり、それぞれのデータ型も確認することができます。
DataFrame からカラム(列)を抽出する
# Seriesカラムを抽出する
anscombe['Series']
0 I
1 I
2 I
3 I
4 I
5 I
# 複数のカラムを指定して抽出する
anscombe[['Series', 'X']]
Series X
0 I 10
1 I 8
2 I 13
3 I 9
4 I 11
(以下省略)
DataFrame から行を抽出する
カラムの抽出ができたので、次は行の抽出方法を見てみましょう。行を抽出するにはiloc
を用いてインデックス番号を指定して抜き出す方法があります。一般的には以下のような書き方になります。
DataFrame.iloc[<インデックス番号>(,<カラム番号>)]
# インデックス番号を指定して抜き出す
anscombe.iloc[10]
Series I
X 5
Y 5.68
Name: 10, dtype: object
# インデックス番号にスライスを渡すこともできます。
print(anscombe.iloc[0:6])
Series X Y
0 I 10 8.04
1 I 8 6.95
2 I 13 7.58
3 I 9 8.81
4 I 11 8.33
5 I 14 9.96
# カラム番号も指定する
anscombe.iloc[0:6,2]
0 8.04
1 6.95
2 7.58
3 8.81
4 8.33
5 9.96
Name: Y, dtype: float64
インデックス番号を指定することで、DataFrameから行を抽出することができました。別の方法として、行数と同じ数の真偽値を与えることでもDataFrameから行を抽出することができます。
# anscombeの行数と同じ数の真偽値のリスト(bool_list)を作成する
row_cnt = len(anscombe)
bool_list = [x % 2 == 1 for x in range(row_cnt)] # インデックス番号が奇数であるものにTrue,偶数であるものにFalseを格納したリストを作成
bool_list
[False,
True,
False,
True,
(途中省略)
False,
True,
False,
True]
この list をインデックス番号と同じように与えると True となっている行だけ(ここでは奇数の行だけ)を DataFrame から抽出してきます。
# bool_listを与えるとインデックス番号が奇数の行だけを抽出してくる
anscombe[bool_list]
Series X Y
1 I 8 6.95
3 I 9 8.81
5 I 14 9.96
7 I 4 4.26
9 I 7 4.81
11 II 10 9.14
13 II 13 8.74
15 II 11 9.26
17 II 6 6.13
19 II 12 9.13
21 II 5 4.74
23 III 8 6.77
25 III 9 7.11
27 III 14 8.84
29 III 4 5.39
31 III 7 6.42
33 IV 8 6.58
35 IV 8 7.71
37 IV 8 8.47
39 IV 8 5.25
41 IV 8 5.56
43 IV 8 6.89
条件抽出
DataFrameに行数分の真偽値のリストやSeriesを渡すとTrue
に該当する部分だけを抽出することができました。これを応用して、例えば、Seriesカラムの値がI
に該当する行のみを抽出するというようなことができるようになります。
# anscombe['Series']=='I' によって真偽値のSeriesが作成され、それをDataFrameに渡している。
anscombe[anscombe['Series']=='I']
複数の抽出条件を課したい場合は次のように記述します。 条件を併記する際の論理演算子はpandasでは次の表のようになります。
python | pandas |
---|---|
AND | & |
OR | | |
NOT | ~ |
anscombe[(anscombe['Series']=='I') & (anscombe['X'] >= 10)]
Series X Y
0 I 10 8.04
2 I 13 7.58
4 I 11 8.33
5 I 14 9.96
8 I 12 10.84