単一値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()メソッドを使っている。