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

今回は列を取得する方法を解説していきます。
まずはとりあえず準備しましょう。
使用するデータは、自作のダミーデータ作成プログラムで作ったこちら。

データの読み込みはこんな感じです。
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"]]
実行結果

今回は列のデータを取得する方法を解説しました。
結構、ごちゃごちゃしてて難しいなと感じていたのですが、こうやってまとめてみると、だいぶ理解が進んできました。
次回は特定の行、特定の列を取得する方法をもう少し詳しく解説していきます。

ということで今回はこんな感じで。
コメント