pandas

pandasのデータフレームから任意の行・列を抽出する〜サンプルコード付き〜

python pandas 抽出

Pythonでcsvデータを取り込んだ際、データフレームの形で取り込まれます

取り込んだデータから、特定のデータを抽出したい場合も多々あります

今回はデータフレームで取り込んだデータから、特定の行・列を抽出し、目的の形へと加工する方法について解説していきます

データフレームとは

データフレームとは、二次元の表形式データを指します

二次元データというのは1対複数の関係であるデータ形式のことを指しています

pandasの説明
pandasには一次元のデータもあり、それをseriesと呼びます

データを扱う場合には、その多くが二次元データであるデータフレームになるかと思います

データフレーム3つの構造

データフレームを扱う際に以下の3つの構造については知っておいたほうが、今後のデータ加工もスムーズに進むと思います

  • values:実際のデータ
  • columns:列名(列ラベル)
  • index:行名(行ラベル)

データフレームを作成する

では今回の行・列抽出を行うためのデータフレームを作成していきたいと思います

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90]] 
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
print(d)
pandasデータフレーム作成

上記コードを入力後、実行すると、画像のような配列が出力されます

「a」「b」のデータ数を増やせば、データフレームの配列も増えていきます

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90,55] ,,
[11,14,56,63,12,55,67,14],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
print(d)

上記のように列数に対して、データの数が上回ると以下のようなエラーが出ます

  File "/opt/anaconda3/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 568, in _list_to_arrays
    columns = _validate_or_indexify_columns(content, columns)

  File "/opt/anaconda3/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 692, in _validate_or_indexify_columns
    raise AssertionError(

AssertionError: 7 columns passed, passed data had 8 columns


The above exception was the direct cause of the following exception:

Traceback (most recent call last):

  File "/Users/untitled0.py", line 14, in <module>
    d = pd.DataFrame(a, columns=b)

  File "/opt/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py", line 570, in __init__
    arrays, columns = to_arrays(data, columns, dtype=dtype)

  File "/opt/anaconda3/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 528, in to_arrays
    return _list_to_arrays(data, columns, coerce_float=coerce_float, dtype=dtype)

  File "/opt/anaconda3/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 571, in _list_to_arrays
    raise ValueError(e) from e

ValueError: 7 columns passed, passed data had 8 columns

データ数と列数が一致してないですよ、ということです

データフレームを作成する場合には気をつけておきましょう

少しデータ数を増やして、それを加工していきます

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
print(d)
pandasデータフレーム加工用

データフレームから抽出する

では、先ほど作成したデータフレームを元に行or列の抽出を行っていきたいと思います

特定の行の抽出

特定の行を抽出したい場合には:(コロン)で行番号を指定することで、可能となります

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
#1行目から3行目を抽出
print(d)
データフレーム特定行の抽出

特定の列を抽出する

pandasで特定の列を抽出するには、カラム名(列名)を指定することで、特定の列を抽出することが可能です

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
#1行目から3行目を抽出
print(d['A列'])

[”]で指定せずに、.(ドット)を利用しても、特定の列を抽出することが可能です

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
#1行目から3行目を抽出
print(d.A列)
pandas 列の抽出

locを使用して特定の行・列を抽出する

locを使うことで、特定の行や列を抽出することが可能です

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
#A列とB列を抽出
print(d.loc[:,['A列','B列']])
pandas loc 使い方1
import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
#C列のみ抽出
print(d.loc[:,['C列']])
pandas loc 使い方2

ilocで行・列を指定して、行・列を抽出する

ilocを使用することで、行・列を指定して、行・列を抽出することが可能です

import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
#すべての行と1列目を抽出
print(d.iloc[:,1])
pandas bloc 使い方1
import pandas as pd
# リスト型の配列を作る。
a = [,[20,50,30,40,70,60,90] ,,
[11,14,56,63,12,55,67],]
b = ['A列','B列','C列','D列','E列','F列','G列']
d = pd.DataFrame(a, columns=b)
#1行目と2列目を取得
print(d.iloc,)
pandas bloc 使い方2

locやilocを使った詳しい解説はこちらを参考にしてください

python pandas 要素の抽出
【キーワード抽出可能】pythonのpandasで要素を抽出する方法(iloc,locなど)pythonのpandasを使用して、データの要素を抽出・変更する方法をサンプルコード・コメントアウト付きで解説していきます。GUIに実装した場合の、キーワードでの抽出方法もサンプルコード付きで解説していきますので、参考にしてください。...

まとめ

  • 特定の行の抽出:(コロンで指定)
  • 特定の列の抽出はカラム名で抽出
  • 特定の行・列を抽出はlocを使用
  • 行・列を指定して、行・列を抽出はilocを使用

統計学やpythonについて学んだ書籍一覧