Python

Python初学者向け:df[‘列名’]とdf[[‘列名’]]の違い~データフレームからのデータの抽出~

スポンサーリンク

 

この記事はこんな方におススメです
  • Pythonを始めたばかりで基本から学びたい方
  • Pythonの基本的な部分を速習してまずは全体像を把握しておきたい方

▶ 初学者向けにデータ分析に関する記事を書いています

はじめに

今回はデータフレームからデータを抽出するときの角括弧[ ]についてです。df[‘列名’](一重括弧)とするときと、df[[‘列名’]](二重括弧)とするときで返り値が異なります。これに戸惑ったことはありませんか?この記事を読み終えればもう迷うことはありません。早速解説していきましょう。

環境

  • Python 3.8.8
  • pandas 1.2.4
  • numpy: 1.20.1
  • matplotlib: 3.3.4

データフレームからのデータ抽出

まずはサンプルのデータフレームを作っておきましょう。

# ライブラリのインポート
import numpy as np
import pandas as pd

# データフレームの作成
data = np.random.randint(low=0,high=10,size=12).reshape(4,3)
df = pd.DataFrame(data,columns=['A','B','C'])
df
サンプルのデータフレーム

4行3列のデータフレームができました。行にはラベルがついておらず、インデックスが0,1,2,3と振られています。列方向にはA, B,Cとラベルがついているデータフレームです。

特定の列を取得する

特定の列を取得する場合には、データフレームの後に角括弧で列名を指定します。

df[‘列名’]

やってみましょう。

# A列を抽出
df['A']
A列を抽出

簡単ですね。このようにdf[‘列名’]とするとデータがSeriesで返ってきます。列をリストで指定することもできます。

df[[列名1, 列名2,..]]

A列とC列を指定してみましょう。

# A列とC列を抽出
df[['A','C']]
A列とC列を抽出

こちらも簡単。でも返ってくるデータ構造が違います。df[[‘列名1’, ‘列名2’]]のように列名をリストで指定するとデータフレームが返ってきます。

df[‘列名’] とdf[[‘列名’]] の違い

ここまでの説明でわかるようにdf[‘列名’]では返り値はSeriesになります。一方でdf[[‘列名’]]は要素が1つのリスト[‘列名’]を指定していることになるので、DataFrameが返ってきます。

特定の区間の行を取得する

次に行を指定して取得する場合ですが、df[]の形式では必ず区間を指定する必要があります。書式を確認しておきましょう。

df[始点の行番号:終点の行番号] ※但し終点の行番号は含まない

やってみましょう。たとえば、行番号0から行番号2までの行を取り出すのであれば次のようにします。

# 行番号0~2を抽出する
df[0:3]
行番号0から行番号2までを抽出

df[行番号]のような指定はできないので注意しましょう。スライスで指定した時に終点行番号は含まないので、例えば行番号1だけを取り出したいときには次のように指定できます。

# 行番号1のみを抽出
df[1:2]
行番号1のみを抽出
スポンサーリンク

まとめ

今回はdf[‘列名’]とdf[[‘列名’]]の違いについて解説しました。これを説明するにあたり、データフレームからのデータの抽出方法を扱いました。データフレームからデータを抽出する方法はいろいろあって、loc, ilocを使って抽出する方法は以下をご覧いただければと思います。

コメント

タイトルとURLをコピーしました