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となる場合の抽出方法を紹介しました。
後続処理に合わせてどちらの型で抽出するかを考慮する必要があるので、適切な形でデータを整形してください。
ではでは👋