▶ Pandasの基本を解説しています。Series/DataFrameの作り方は以下をご覧ください。
はじめに
今回はデータフレームの列の値を書き換えるときの注意することをまとめていくことにします。データフレームの特定の列の値を書き換えるのはよくおこなう操作だと思いますが、リストやndarrayを使うときと、Seririesを使うといで挙動が違います。この辺を整理していきましょう。
データフレームの列の値を書き換える
データフレームの列の値を配列やSeriesを使って書き換えていきます。まずはサンプルのデータフレームを作っておきましょう。
# ライブラリのインポート
import numpy as np
import pandas as pd
# データフレームの作成
sample_df = pd.DataFrame(np.arange(24).reshape(6,4),columns=['A','B','C','D'])
sample_df
リストやndarrayを代入する
ndarrayを作成してデータフレームのD列に代入してみましょう。
# ndarrayの作成
sample_array = np.arange(6)
# データフレームのD列に代入
sample_df['D'] = sample_array
sample_df
赤枠の部分を書き換えることができました。今回はndarrayで試しましたが、リストの場合も同様です。このように列項目は、データフレームの行数と指定したndarrayやリストのサイズが一致していれば、「df[‘列名’] = ndarray」とすることで問題なく書き換えることができます。
Seriesを代入する
次にSeriesの場合を見てみましょう。Seriesの場合は注意が必要です。
# Seriesを作成
sample_ser = pd.Series(sample_array)
sample_ser
このsample_serを使ってデータフレームのC列を書き換えてみましょう。
# データフレームのC列に代入
sample_df['C'] = sample_ser
sample_df
先ほどのsample_arrayの時と同じようにちゃんと書き換えることができました。もう一つサンプルのSeriesを作ってみましょう。
# indexを指定したSeriesの作成
sample_ser2 = pd.Series(sample_array,index=np.arange(3,9))
sample_ser2
今度はこのsample_ser2を使ってデータフレームのB列を書き換えてみましょう。
# データフレームのB列に代入
sample_df['B'] = sample_ser2
sample_df
今度は先ほどのようにはいきません。値が入っているのはindexが3,4,5のものだけです。実はデータフレームの列にSeriesを指定した時には、Serieisのindexがデータフレームの列名indexと一致していないとNaNが代入されます。先ほどのndarrayのときのような挙動を期待していたのに異なる結果になった、というときはこれを確認してみるとよいでしょう。
今回、sample_ser2はindexが3~8まで、データフレームは0~5までだたので、3,4,5だけがindexが一致して書き換えられ、その他の箇所はNaNとなっています。
まとめ
今回はデータフレームの列の値を書き換える方法を扱いました。リストやndarrayを使った代入では行数の指定したリスト(ndarray)のサイズが一致していれば、指定したリスト(ndarray)の値に書き換えられます。
一方、Seriesを使った代入ではindexが一致したもののみが書き換えられ、indexが一致しないものはNaNが代入されるので注意してください。
コメント