いつも忘れるpandas基礎事項 ~ pandas.Dataframeの列への代入
次のようなテストコードで、dataframeであるdf1を作成し、A列~D列を用意する。
dataframeの値はnp.random.randnで適当に生成。
ここで、df1のC列とD列を書き換えることを考えるが、indexを指定したdf2の列で書き換えるのと、indexを指定しないdf3の列で書き換えるのでは書き換わり方が異なる。
indexを明確に割り当てたdataframeから列を抽出するとindexも保たれて、それに該当するdataframeの値が書き換わる。
一方、indexを割り当てていないdataframeから抽出した列で書き換えると、indexが明示されていないため書き換えられる場所はindexが小さい順となる。
def test(self): matrix = np.random.randn(6, 4) df1 = pd.DataFrame(matrix, columns=list('ABCD')) #この時点でのdf1 A B C D 0 0.453371 -0.761359 0.959431 -2.675909 1 0.659052 1.234831 -1.268636 1.610045 2 1.819746 0.065682 0.436914 -0.201970 3 -0.491170 -0.583853 0.820178 -0.356666 4 -0.354359 -0.434484 0.229461 0.475860 5 -0.227457 0.059744 -0.106924 -0.901803 df2 = pd.DataFrame( {'A': [29, 24, 10, 5, 0]}, columns=['A'], index=[0,1,2,4,5]) df1['C'] = df2['A'] #この時点でのdf1 A B C D 0 0.453371 -0.761359 29.0 -2.675909 1 0.659052 1.234831 24.0 1.610045 2 1.819746 0.065682 10.0 -0.201970 3 -0.491170 -0.583853 NaN -0.356666 4 -0.354359 -0.434484 5.0 0.475860 5 -0.227457 0.059744 0.0 -0.901803 df3 = pd.DataFrame( {'A': [29, 24, 10, 5, 0]}, columns=['A'] ) df1['D'] = df3['A'] #最終的に次のように書き換わる。 A B C D 0 -0.617475 -0.315053 29.0 29.0 1 -1.252583 -0.094725 24.0 24.0 2 0.356797 -1.704311 10.0 10.0 3 -0.940906 -0.313336 NaN 5.0 4 0.880427 0.561398 5.0 0.0 5 -1.461549 0.859590 0.0 NaN