LoginSignup
0
0

More than 1 year has passed since last update.

Pandas: データフレームについて--03: 行,列の取り出し

Last updated at Posted at 2022-06-20

行,列を取り出す

取り出した結果を保存するときには,データフレームに代入する。

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' と指定するようにしておくと吉。

複数行を取り出す指定はできない(インデックスにリストは指定できない)ので,後述の lociloc アトリビュートを使う。

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
  1. 内容によって取り出す場合は,「2.4. 条件式を使って指定」を参照。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0