要素の操作
以下の2つのDataFrame
を使っていく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import numpy as np import pandas as pd lst = [ ["Alex", "DC", 44, 168], ["Bert", "NY", 18, 176], ["Carl", "CA", 26, 175], ["Daryl", "DC", 32, 182], ["Eddy", "CA", 58, 192] ] dflst = pd.DataFrame(lst, columns=["name", "state", "age", "height"]) dflst = dflst.set_index("name") print(dflst) # state age height # name # Alex DC 44 168 # Bert NY 18 176 # Carl CA 26 175 # Daryl DC 32 182 # Eddy CA 58 192 dfary = pd.DataFrame(np.arange(9).reshape(3, 3)) print(dfary) # 0 1 2 # 0 0 1 2 # 1 3 4 5 # 2 6 7 8 |
at/iat
~単独要素の参照・変更
at
~インデックス指定
at
は行・列のラベルを指定して単独の要素を参照・変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
print(dflst.at["Alex", "age"]) # 44 dflst.at["Alex", "age"] = 55 print(dflst) # state age height # name # Alex DC 55 168 # Bert NY 18 176 # Carl CA 26 175 # Daryl DC 32 182 # Eddy CA 58 192 |
インデックスがデフォルトの数値の場合は数値指定。
1 2 3 4 5 6 7 8 9 10 11 |
print(dfary.at[2, 1]) # 7 dfary.at[2, 1] = 77 print(dfary) # 0 1 2 # 0 0 1 2 # 1 3 4 5 # 2 6 77 8 |
iat
~行・列番号指定
iat
は行・列の番号を数値で指定して単独の要素を参照・変更。行・列のインデックスはカウントされない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
print(dflst.iat[1, 2]) # 176 dflst.iat[1, 2] = 199 print(dflst) # state age height # name # Alex DC 55 168 # Bert NY 18 199 # Carl CA 26 175 # Daryl DC 32 182 # Eddy CA 58 192 |
インデックスがデフォルトの数値の場合は数値指定。
1 2 3 4 5 6 7 8 9 10 11 |
print(dfary.iat[0, 2]) # 2 dfary.iat[0, 2] = 22 print(dfary) # 0 1 2 # 0 0 1 22 # 1 3 4 5 # 2 6 77 8 |
loc/iloc
~単独要素・スライスの参照・変更
loc
~インデックス指定/終端含む
loc
の単独要素指定もat
と同様。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
print(dflst.loc["Carl", "state"]) # CA dflst.loc["Carl", "state"] = "AZ" print(dflst) # state age height # name # Alex DC 55 168 # Bert NY 18 199 # Carl AZ 26 175 # Daryl DC 32 182 # Eddy CA 58 192 |
loc
は行・列のラベルにスライスを指定可能。ただしloc
のスライス指定ではリストや配列と異なり、(デフォルトの数値ラベルであっても)終端の行・列を含む点に注意。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
print(dflst.loc["Bert":"Daryl", "state":"age"]) # state age # name # Bert NY 18 # Carl AZ 26 # Daryl DC 32 print(dfary.loc[1:2, 0:1]) # 0 1 # 1 3 4 # 2 6 77 |
スライス指定した範囲を変更可能。行単位・列単位のデータの更新の際に使う。
1 2 3 4 5 6 7 |
dfary.loc[:, 1] = [10, 40, 70] print(dfary) # 0 1 2 # 0 0 10 22 # 1 3 40 5 # 2 6 70 8 |
iloc
~行・列番号指定/終端含まず
iloc
は行・列の番号にスライスを指定可能。iloc
のスライス指定では、リストや配列と同じで、終端の行・列は含まれない。
1 2 3 4 5 6 7 8 9 10 11 12 |
print(dflst.iloc[1:3, 0:2]) # state age # name # Bert NY 18 # Carl AZ 26 print(dfary.iloc[0:2, 0:1]) # 0 # 0 0 # 1 3 |
iloc
でもスライス指定で内容変更が可能。
1 2 3 4 5 6 7 |
dfary.iloc[:, 1] = [100, 400, 700] print(dfary) # 0 1 2 # 0 0 100 22 # 1 3 400 5 # 2 6 700 8 |