pandasの単一値Seriesから値のみを取り出す & Series/DataFrameのデータをリストとして取得する


単一値Seriesから値のみを取り出す

背景

DataFrameから特定のデータを絞ったとき、Series型になる。この生のデータが欲しい。

some_df = pd.DataFrame([[1.0,2.0],[3.0,4.0]], columns=['foo', 'bar'])
baz = some_df['foo'][:1]
print(baz)
# 0    1.0
# Name: foo, dtype: float64

たとえば、この数値1.0を取り出したい。

結論

以下で取得できる。

baz.iloc[-1]

備考・注意

baz.iloc[-1]は、"最後の1行を取り出す"というメソッドの呼び方だが、bazに複数Columnが含まれればSeries型として取り出され、単一Columnの場合は値になるので、これを利用している。

注意として、bazに複数indexが含まれる場合は最終行のみしか出力されないので、バグが入り込みうる。

some_df = pd.DataFrame([[1.0,2.0],[3.0,4.0]], columns=['foo', 'bar'])
baz = some_df['foo'][:2]
print(baz)
# 0    1.0
# 1    3.0
# Name: foo, dtype: float64

baz.iloc[-1]
# 3.0

Series/DataFrameのデータをリストとして取得する

背景

pandasの並んだデータ(Series/DataFrame)をリストにしたい時がある。

結論

baz.values.tolist()メソッドを使う。

Seriesの場合

some_df = pd.DataFrame([[1.0,2.0],[3.0,4.0]], columns=['foo', 'bar'])
baz = some_df['foo']
print(baz)
# 0    1.0
# 1    3.0
# Name: foo, dtype: float64
baz_list = baz.values.tolist()
print(baz_list)
# [1.0, 3.0]

DataFrameの場合

some_df = pd.DataFrame([[1.0,2.0],[3.0,4.0]], columns=['foo', 'bar'])
baz = some_df[:1]
print(baz)
#    foo  bar
# 0  1.0  2.0
baz_list = baz.values.tolist()
print(baz_list)
# [[1.0, 2.0]]

※Seriesは必ず1列だが、DataFrameはm行n列を格納できるので、1行のデータでも二重リストが出てくる!

備考

baz.valuesでnumpyのndarrayに変換できるので、ndarrayのtolist()メソッドを使っている。