行,列を取り出す
取り出した結果を保存するときには,データフレームに代入する。
1. filter()
を使う
データフレームの内容によって取り出すのではなく,列名,行インデックスを指定して取り出す。1
filter(items=None, like: 'str | None' = None, regex: 'str | None' = None, axis=None)
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [1.2, 3.4, 5.6, 7.8, 9.0],
'c': ['A', 'B', 'C', 'D', 'E']
})
df
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | A |
1 | 2 | 3.4 | B |
2 | 3 | 5.6 | C |
3 | 4 | 7.8 | D |
4 | 5 | 9.0 | E |
1.1. 列名を指定して列を取り出す
filter(items=列名)
df.filter(items='a')
a | |
---|---|
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
複数列を指定できる。また,取り出す順序も指定できる。重複して指定することもできる。
df.filter(items=['c', 'a', 'b', 'b'])
c | a | b | b | |
---|---|---|---|---|
0 | A | 1 | 1.2 | 1.2 |
1 | B | 2 | 3.4 | 3.4 |
2 | C | 3 | 5.6 | 5.6 |
3 | D | 4 | 7.8 | 7.8 |
4 | E | 5 | 9.0 | 9.0 |
1.2. インデックスを指定して行を取り出す
filter(like=インデックス, axis=0)
axis=0
を指定する。axis
が 0 か 1 か,勘違いをしないために,axis='index'
と指定するようにしておくと吉。
複数行を取り出す指定はできない(インデックスにリストは指定できない)ので,後述の loc
,iloc
アトリビュートを使う。
df.filter(like='3', axis='index') # index が 3 のものを抽出
a | b | c | |
---|---|---|---|
3 | 4 | 7.8 | D |
2. 列名,行名,位置を指定する
2.1. 列名を指定
df['a']
0 1
1 2
2 3
3 4
4 5
Name: a, dtype: int64
1 列だけを指定するときには データフレーム.列名
でもよい。
なお,前の df['a']
と同じく,この方法で取り出されるのはデータフレーム(pandas.core.frame.DataFrame)ではなく,シリーズ(pandas.core.series.Series)である。
df.b
0 1.2
1 3.4
2 5.6
3 7.8
4 9.0
Name: b, dtype: float64
複数列を取り出すときには,リストで指定する(結果はデータフレームである)。重複して指定することもできる。
df[['c', 'a', 'a']]
c | a | a | |
---|---|---|---|
0 | A | 1 | 1 |
1 | B | 2 | 2 |
2 | C | 3 | 3 |
3 | D | 4 | 4 |
4 | E | 5 | 5 |
2.2. loc
アトリビュートを使って指定
df.loc[:, 'a']
0 1
1 2
2 3
3 4
4 5
Name: a, dtype: int64
df.loc[:, ['c', 'a']]
c | a | |
---|---|---|
0 | A | 1 |
1 | B | 2 |
2 | C | 3 |
3 | D | 4 |
4 | E | 5 |
loc
アトリビュートを使うときには,取り出す行も同時に指定できる。
なお,1:3
のように指定したとき,3 も含まれるので注意。
df.loc[1:3, ['c', 'a']]
c | a | |
---|---|---|
1 | B | 2 |
2 | C | 3 |
3 | D | 4 |
2.3. iloc
アトリビュートを使って指定
df.iloc[[0, 2, 4], [2, 0]]
c | a | |
---|---|---|
0 | A | 1 |
2 | C | 3 |
4 | E | 5 |
2.4. 条件式を使って指定
df[df.a > 3]
a | b | c | |
---|---|---|---|
3 | 4 | 7.8 | D |
4 | 5 | 9.0 | E |
df[df['c'].isin(['A', 'D'])]
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | A |
3 | 4 | 7.8 | D |
条件式の論理和,論理積をとるとき,それぞれの条件式はカッコで括ること。
df[(df.a > 3) | (df.a < 2)]
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | A |
3 | 4 | 7.8 | D |
4 | 5 | 9.0 | E |
df[(df.a > 3) & (df.b > 8)]
a | b | c | |
---|---|---|---|
4 | 5 | 9.0 | E |
3. もっと知りたい人
help(df.filter) # Help on method filter in module pandas.core.generic
help(df.loc) # Help on _LocIndexer in module pandas.core.indexing object
help(df.iloc) # Help on _iLocIndexer in module pandas.core.indexing object
-
内容によって取り出す場合は,「2.4. 条件式を使って指定」を参照。 ↩