Pythonのデータ解析支援ライブラリPandas 〜その3 列を指定して取得〜

スポンサーリンク

データ解析支援ライブラリPandas

前回はデータ解析支援ライブラリPandasの行を取得する方法を解説しました。

Pythonのデータ解析支援ライブラリPandas 〜その2 行を指定して取得〜
データ解析支援ライブラリPandas前回、データ解析支援ライブラリPandasを使って、CSVファイルの読み込み方法を解説しました。今回は読み込んだデータを表示する方法を解説していきます。まずは前回のおさら...

今回は列を取得する方法を解説していきます。

まずはとりあえず準備しましょう。

使用するデータは、自作のダミーデータ作成プログラムで作ったこちら。

Pythonでファイル数、行数、列数を指定してダミーデータのファイルを生成するプログラムを作ってみた
ランダムデータのファイルが欲しい!前にjunney様より「グラフタイトルをファイル名としたい」というご質問を頂き、答えてみました。ただどうやら他にもプログラムが動いていない部分があるようで、再度ご質問を頂きました。...

データの読み込みはこんな感じです。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df

実行結果

ということで解説を始めていきましょう。

スポンサーリンク

列名を指定して1つの列のデータを取得

Pandasで列を取得するのは、行を取得するのと比べて、少しややこしいです。

また1列だけ取得する方が簡単なので、まずは1列だけ取得する方法を解説していきます。

1つの列のデータを取得するには、列名を使い、df[“列名”]とします。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df["value_3"]

実行結果
dataname
data_1     99
data_2     53
data_3     37
data_4     97
data_5     24
data_6     99
data_7     45
data_8     65
data_9     84
data_10    22
Name: value_3, dtype: int64

またかぎ括弧を使わずに、df.列名という書き方も可能です。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df.value_3

実行結果
dataname
data_1     99
data_2     53
data_3     37
data_4     97
data_5     24
data_6     99
data_7     45
data_8     65
data_9     84
data_10    22
Name: value_3, dtype: int64

そしてこの方法で複数の列を取得することはできません。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df["value_2", "value_5"]

実行結果
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2896             try:
-> 2897                 return self._engine.get_loc(key)
   2898             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: ('value_2', 'value_5')
(以下略)

ここからがややこしくなってくるので、なるべく場合分けして解説していきます。

スポンサーリンク

全ての行、特定の列のデータを取得:.iloc[:, 列]、.loc[:, “列名”]

まずは全ての行、特定の列のデータの取得方法です。

これは先ほどのdf[“列名”]やdf.列名と同じ意味ですが、今後の解説のためにまずはここから解説します。

列番号を使う.iloc[:, 列]と列名を使う.loc[:, “列名”]があります。

「.iloc[:, 列]」を試してみるとこんな感じです。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df.iloc[:, 3]

実行結果
dataname
data_1     28
data_2      1
data_3     89
data_4     42
data_5     39
data_6     21
data_7     80
data_8     46
data_9     42
data_10    27
Name: value_4, dtype: int64

「.loc[:, “列名”]」ではこうなります。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df.loc[:, "value_4"]

実行結果
dataname
data_1     28
data_2      1
data_3     89
data_4     42
data_5     39
data_6     21
data_7     80
data_8     46
data_9     42
data_10    27
Name: value_4, dtype: int64

これは前回少し出てきたように.iloc[X,Y]だったり、df.loc[X, Y]ではX行目のY列目のデータを取得すると認識されることから、Xに「:(コロン)」を使うことで、X行全てと指定することができるというわけです。

スポンサーリンク

全ての行、連続した複数の列のデータを取得:.iloc[:, 列1:列2]、.loc[:, “列名1″:”列名2”]

次に全ての行、連続した列のデータの取得方法です、

この場合は、.iloc[:, 列1:列2]、.loc[:, “列名1″:”列名2”]という記述方法ができます。

まずは.iloc[:, 列1:列2]を試してみましょう。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df.iloc[:, 1:4]

実行結果

次に.loc[:, “列名1″:”列名2”]を試してみます。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df.loc[:,"value_2":"value_4"]

実行結果
スポンサーリンク

全ての行、連続していない複数の列のデータを取得:.iloc[:, [列1,列2]]、.loc[:, [“列名1”,”列名2″…]]

連続していない複数の列のデータを取得するのは、前回解説した「連続しない複数行を取得する方法」と似ています。

連続しない複数行を取得する場合、.iloc[[インデックス1, インデックス2],列]や.loc[[“インデックス名1″,”インデックス名2″],”列名”]とすると解説しました。

しかし全部の列を指定する場合、列や”列名”は省略できるため、.iloc[[インデックス1,インデックス2]]や.loc[[“インデックス名1″,”インデックス名2”]]とも解説しました。

つまり基本は.iloc[インデックス,列]や.loc[“インデックス名”,”列名”]で、インデックス、またはインデックス名を全てを示す「:(コロン)」にします。

そして.iloc[:, [列1,列2…]]、.loc[:, [“列名1”,”列名2″…]]とするわけです。

ということで試してみましょう。

import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df.iloc[:,[1, 4]]
import pandas as pd

df = pd.read_csv("python-pandas-2_data.txt", index_col=0)

df.loc[:,["value_2", "value_5"]]

実行結果

今回は列のデータを取得する方法を解説しました。

結構、ごちゃごちゃしてて難しいなと感じていたのですが、こうやってまとめてみると、だいぶ理解が進んできました。

次回は特定の行、特定の列を取得する方法をもう少し詳しく解説していきます。

Pythonのデータ解析支援ライブラリPandas 〜その4 行と列の両方を指定して取得〜
データ解析支援ライブラリPandas前回はデータ解析支援ライブラリPandasで列を指定してデータを取得する方法を解説しました。行も列も取得する方法が色々あって、なかなかややこしいですが、今回はさらにややこしい行と...

ということで今回はこんな感じで。

コメント

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