Python

【Python】pandas DataFrameの値を更新

【Python】pandas DataFrameの値を更新

pandasのDataFrameの値を更新する方法がいくつかあるので、後で見返す為にも更新方法をまとめておく。
以下のlocやwhereの他に一括更新の方法がある。


DataFrameの値を更新する方法

pandasのDataFrameの値を更新する方法がいくつかあるが、大きく以下の3つの方法に分けられる。

  • 値を一括代入
  • 条件に合致するカラムを更新
  • 別のDataFrameで上書き

各方法についてDataFrameを用いながら説明する。

import pandas as pd

data_list1 = [
[1,2,3],
[2,3,4],
[3,4,5]
]
col_list1 = ["c1","c2","c3"]
df1 = pd.DataFrame(data=data_list1, columns=col_list1)
print(df1)

#    c1  c2  c3
# 0   1   2   3
# 1   2   3   4
# 2   3   4   5




値を一括代入

値を一括代入する方法は簡単だが、全行を一気に更新してしまうので初期化くらいにしか使えない。

df1["c3"]=1
print(df1)
#    c1  c2  c3
# 0   1   2   1
# 1   2   3   1
# 2   3   4   1




条件に合致するカラムを更新

条件に合致するカラムだけ更新したい場合は、locを用いる。

df1.loc[df1["c3"]>3, ["c3"]]=1
print(df1)
#    c1  c2  c3
# 0   1   2   3
# 1   2   3   1
# 2   3   4   1




locを用いずに更新しようとしても、locを使うように促す警告が出て更新できない。

df1[df1["c3"]>3]["c3"]=1
print(df1)
# SettingWithCopyWarning: 
# A value is trying to be set on a copy of a slice from a DataFrame.
# Try using .loc[row_indexer,col_indexer] = value instead
#    c1  c2  c3
# 0   1   2   3
# 1   2   3   4
# 2   3   4   5


条件に合わないセルを更新する方法として、 where を使う方法もある。
下の例ではカラム"c2"が4以上ではない、つまり4未満である行のカラム"c3"の値を更新している。

df1["c3"].where(df1["c2"] >= 4, 10, inplace=True)  # 条件に合わないセルを更新
print(df1)

#    c1  c2    c3
# 0   1   2  10.0
# 1   2   3  10.0
# 2   3   4   1.0




別のDataFrameで上書き

別のDataFrameで上書きしてカラムを更新する方法もある。
この方法を使えば、親のDataFrameから処理対象の部分だけ抽出して、処理後に親のDataFrameに処理結果を反映させるという事もできる。

data_list2 = [
[5,7],
[6,8],
]
col_list2 = ["c4","c3"]
df2 = pd.DataFrame(data=data_list2, columns=col_list2)
print(df2)
#    c4  c3
# 0   5   7
# 1   6   8

df1.update(df2)
print(df1)
#    c1  c2   c3
# 0   1   2  7.0
# 1   2   3  8.0
# 2   3   4  1.0

コチラもオススメ

KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。

にほんブログ村 IT技術ブログへ

-Python
-

Translate »

Copyright© ITips , 2020 All Rights Reserved.