Pandas DataFrame の列値の置換
-
pandas で列の値を置換するには
map()
メソッドを使用する -
Pandas で列値を置換するには
loc
メソッドを使用する - Pandas の DataFrame で列の値を条件付きで置き換える
-
replace()
メソッドを使用して値を変更する
今回のチュートリアルでは、Pandas DataFrame で列値を置換する方法をご紹介します。今回は、列の値を簡単に置き換えるための 3つの関数を取り上げます。
pandas で列の値を置換するには map()
メソッドを使用する
DataFrame のカラムは Pandas の Series
です。列の各値を別の値に置き換えるには map
メソッドを使用することができます。
Series.map()
構文
Series.map(arg, na_action=None)
- パラメータ:
arg
: このパラメータはSeries
をマッピングするために使われます。これはコレクションでも関数でもよい。na_action
:NaN
(Not a Number) の値を扱うために使われます。値はNone
とignore
の 2つです。None
がデフォルトで、map()
はNan
値を含むすべての値にマッピングを適用し、ignore
はNaN
値をマッピングメソッドに渡さずにそのままカラムに残します。
これは同じインデックスを持つ Series
を返します。
それでは、map
メソッドを実装する例を見てみましょう。以下の例では、同じ DataFrame
を使用します。
import pandas as pd
import numpy as np
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])
print(df)
出力:
name city
0 michael berlin
1 louis paris
2 jack roma
3 jasmine NaN
Pandas DataFrame で列の値をコレクションに置き換える
import pandas as pd
import numpy as np
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])
# replace column values with collection
df["city"] = df["city"].map(
{"berlin": "dubai", "paris": "moscow", "roma": "milan", np.nan: "NY"},
na_action=None,
)
print(df)
出力:
name city
0 michael dubai
1 louis moscow
2 jack milan
3 jasmine NY
元の DataFrame city
の列値は、map()
メソッドの最初のパラメータとして辞書の新しい値に置き換えられます。
Pandas DataFrame の関数で列の値を置き換える
import pandas as pd
import numpy as np
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])
# replace column values with function
df["city"] = df["city"].map("I am from {}".format)
print(df)
出力:
name city
0 michael I am from berlin
1 louis I am from paris
2 jack I am from roma
3 jasmine I am from nan
デフォルトでは na_action
は None
になっているので、元のカラムの NaN
も新しい文字列 I am from nan
に置き換えられます。
置換されずに NaN
を保持したい場合は、na_action
に ignore
を設定することができます。
import pandas as pd
import numpy as np
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])
# replace column values excluding NaN
df["city"] = df["city"].map("I am from {}".format, na_action="ignore")
print(df)
出力:
name city
0 michael I am from berlin
1 louis I am from paris
2 jack I am from roma
3 jasmine NaN
Pandas で列値を置換するには loc
メソッドを使用する
Pandas DataFrame の列値を置き換えるもう一つの方法は、DataFrame
の loc()
メソッドです。loc()
メソッドはラベルから値にアクセスします。
DataFrame.loc[]
構文
pandas.DataFrame.loc[condition, column_label] = new_value
- パラメータ
condition
: このパラメータは条件を真にする値を返します。column_label
: このパラメータは更新対象のカラムを指定します。
パラメータで値を決定した後、new_value
に更新します。
それでは、loc
メソッドを実装する例を見てみましょう。以下の DataFrame
を例にします。
import pandas as pd
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"grades": [30, 70, 40, 80],
"result": ["N/A", "N/A", "N/A", "N/A"],
}
df = pd.DataFrame(data, columns=["name", "grades", "result"])
print(df)
出力:
name grades result
0 michael 30 N/A
1 louis 70 N/A
2 jack 40 N/A
3 jasmine 80 N/A
Pandas の DataFrame で列の値を条件付きで置き換える
ブーリアン条件を使って、対象となる要素を指定することができます。
import pandas as pd
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"grades": [30, 70, 40, 80],
"result": ["N/A", "N/A", "N/A", "N/A"],
}
df = pd.DataFrame(data, columns=["name", "grades", "result"])
df.loc[df.grades > 50, "result"] = "success"
df.loc[df.grades < 50, "result"] = "fail"
print(df)
出力:
name grades result
0 michael 30 fail
1 louis 70 success
2 jack 40 fail
3 jasmine 80 success
df.loc[df.grades>50, 'result']='success'
は、grades
列値が 50 よりも大きい場合は sucess
に置き換えます。
df.loc[df.grades<50,'result']='fail'
は、grades
列値が 50 よりも小さければ fail
に置き換えます。
replace()
メソッドを使用して値を変更する
Pandas DataFrame の列値を置き換えるもう一つの方法は、Series.replace()
メソッドです。
Series.replace()
構文
- 1つの単一の値を置き換える
df[column_name].replace([old_value], new_value)
- 複数の値を同じ値に置き換える
df[column_name].replace([old_value1, old_value2, old_value3], new_value)
- 複数の値を複数の値に置き換える
df[column_name].replace(
[old_value1, old_value2, old_value3], [new_value1, new_value2, new_value3]
)
- DataFrame 全体の値を新しい値に置き換える
df.replace([old_value], new_value)
残りの例では、以下の DataFrame を使用します。
import pandas as pd
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"salary": [700, 800, 1000, 1200],
}
df = pd.DataFrame(data, columns=["name", "salary"])
print(df)
出力:
name salary
0 michael 700
1 louis 800
2 jack 1000
3 jasmine 1200
Pandas DataFrame で列の値を複数の値で置き換える
import pandas as pd
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"salary": [700, 800, 1000, 1200],
}
df = pd.DataFrame(data, columns=["name", "salary"])
df["name"] = df["name"].replace(["michael", "louis"], ["karl", "lionel"])
print(df)
出力:
name salary
0 karl 700
1 lionel 800
2 jack 1000
3 jasmine 1200
Pandas DataFrame で列の値を同じ値だけに置き換える
import pandas as pd
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"salary": [700, 800, 1000, 1200],
}
df = pd.DataFrame(data, columns=["name", "salary"])
df["salary"] = df["salary"].replace([1000, 1200], 1500)
print(df)
出力:
name salary
0 karl 700
1 lionel 800
2 jack 1500
3 jasmine 1500
Pandas DataFrame で列の値を 1つの値に置き換える
import pandas as pd
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"salary": [700, 800, 1000, 1200],
}
df = pd.DataFrame(data, columns=["name", "salary"])
df["salary"] = df["salary"].replace([700], 750)
print(df)
出力:
name salary
0 karl 750
1 lionel 800
2 jack 1000
3 jasmine 1200
Pandas DataFrame 全体の値を置き換える
import pandas as pd
data = {
"name": ["michael", "louis", "jack", "jasmine"],
"salary": [700, 800, 1000, 1000],
}
df = pd.DataFrame(data, columns=["name", "salary"])
df = df.replace([1000], 1400)
print(df)
出力:
name salary
0 karl 750
1 lionel 800
2 jack 1400
3 jasmine 1400