【Python】Pandasで単一列をDataFrameとして抽出する

PandasのDataFrameで1列だけを抽出したいとき、意図せずSeriesになってしまって後続処理で扱いづらいケースがしばしばあります。

1列だけをDataFrameとして抽出することもできるので、どうすればSeriesになってどうすればDataFrameとして抽出できるのかを確認していきたいと思います。

検証用DataFrame

以下のようなDataFrameを用意して、1列抽出をしていきます。

import pandas as pd

df = pd.DataFrame({'A': [10, 11, 12], 'B': [0.0, 0.1, 0.2], 'C': ['a', 'b', 'c']})

>>
    A    B  C
0  10  0.0  a
1  11  0.1  b
2  12  0.2  c

type(df)
>> pandas.core.frame.DataFrame

単一列を抽出してSeriesとなるケース

まずはDataFrameから単一列を抽出したときにSeriesとなるケースです。

列名をそのまま指定した場合にはSeriesとして抽出されます。

df["A"]

>>
0    10
1    11
2    12
Name: A, dtype: int64

type(df["A"])
>> pandas.core.series.Series

また、locやilocを使って単一列をそのまま指定して抽出した場合もSeriesとなります。

df.loc[:,"A"]

>>
0    10
1    11
2    12
Name: A, dtype: int64

type(df.loc[:,"A"])
>> pandas.core.series.Series


df.iloc[:, 0]

>>
0    10
1    11
2    12
Name: A, dtype: int64

type(df.iloc[:, 0])
>> pandas.core.series.Series

列名を.(ドット)でつなげてそのまま指定することもできます。この場合もSeriesとなります。

df.A

>>
0    10
1    11
2    12
Name: A, dtype: int64

type(df.A)
>> pandas.core.series.Series

単一列を抽出してDataFrameとなるケース

続いては単一列を抽出するときにDataFrameとしてそのまま抽出する方法です。

抽出列を配列として指定することで、DataFrameとして抽出することができます。

df[["A"]]

>>
    A
0  10
1  11
2  12

type(df[["A"]])
>> pandas.core.frame.DataFrame

df[]で指定する要素として、要素数1の配列[“A”]を指定しています。

loc、ilocについても同様です。

df.loc[:,["A"]]

>>
    A
0  10
1  11
2  12

type(df.loc[:,["A"]])
>> pandas.core.frame.DataFrame


df.iloc[:, [0]]
>>
    A
0  10
1  11
2  12

type(df.iloc[:, [0]])
>> pandas.core.frame.DataFrame

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

初学者の方にはこちらもオススメです^^

まとめ

DataFrameから単一列を抽出した場合にSeriesとなる場合とDataFrameとなる場合の抽出方法を紹介しました。

後続処理に合わせてどちらの型で抽出するかを考慮する必要があるので、適切な形でデータを整形してください。

ではでは👋