Pandas Fillna 複数の列
この記事では、fillna()
関数を使用して NaN
値を数値に置き換える方法について説明します。 Pandas データフレームの NaN
値を文字列に置き換える方法も学習します。
Pandas で fillna()
を使用して NaN 値の複数の列を任意のデータ型に置き換える
Pandas の fillna()
関数は、NaN
値を指定された値に置き換えることができます。 この関数は、列または行内でこの値を伝播するか、列に基づいて NaN
値を別の値に置き換えることができます。
pd
としてインポートされた Pandas ライブラリと、np
としてインポートされた NumPy ライブラリが続く新しいスクリプトを作成します。 次に、City_Temp
という新しいデータフレームを作成し、これを Pandas データフレームと等しくなるように設定します。
タルサとダラスの 2つの都市の気温を 1 週間追跡しているとしますが、データは不完全です。 各都市の 5 日間の気温値を含む 2 行のデータを作成します。
最初の行には Tulsa
のキーといくつかの数値と np.nan
がリスト内に含まれ、Dallas
のキーを持つ 2 番目の行にはいくつかの数値と np.nan
も含まれます。 np.nan
値は、データフレームに null 値を作成します。
次に、月曜から金曜までの省略名を含むリストを使用して index
引数を追加します。 結果がコンソールに出力されると、5 日間にわたる 2つの都市の温度値を含むデータフレームが表示されます。
import numpy as np
import pandas as pd
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 NaN
Thu NaN NaN
Fri NaN 92.1
City_Temp
データフレーム内の空の値を埋めるには、print
ステートメント内で Pandas の fillna()
関数を使用できます。 fillna()
関数では、単一の値 80.0 を追加します。結果がコンソールに出力されると、データフレームのすべての NaN
値が数値 80.0 に置き換えられていることがわかります。
print(City_Temp.fillna(80.0))
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 80.0
Thu 80.0 80.0
Fri 80.0 92.1
特定の値を提供する代わりに、値 ffill
で method
引数を使用して、関数に NaN
値を同じ列のその上の値で埋めるように指示することができます。 ここで、Tulsa
の NaN
値は 75.1 に置き換えられ、Dallas
の値は 93.1 に置き換えられます。
print(City_Temp.fillna(method="ffill"))
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 93.1
Thu 75.1 93.1
Fri 75.1 92.1
同様に、method
引数の値が bfill
に設定されている場合、バックフィルを実行できます。 結果は、Dallas
列の NaN
値が値 92.1 で埋められていることを示していますが、Tulsa
列の値は置き換えられていません。
これは、NaN
値を置き換えるために使用できる行 Friday
の下に有効な値がないためです。
print(City_Temp.fillna(method="bfill"))
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 92.1
Thu NaN 92.1
Fri NaN 92.1
各都市のデータフレーム内の最初の NaN
要素の出現を埋めたい場合、method
タイプに ffil
値を使用し、値 1 で limit
引数を追加できます。結果は、 NaN
値の最初の発生のみが順方向フィルに置き換えられます。
print(City_Temp.fillna(method="ffill", limit=1))
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 93.1
Thu 75.1 NaN
Fri NaN 92.1
NaN
要素を平均で埋める
最後に、異なる列の NaN
要素に異なる値を指定できます。
NaN
要素をその都市の平均気温値で埋めたいとしましょう。 これを行うには、fillna()
関数内で中括弧を使用して辞書を作成します。
ディクショナリに、np.mean()
関数を含む np.round()
関数を使用して、平均温度値を小数点以下 2 桁に丸めたキー Tulsa
を追加します。
mean()
関数内で、City_Temp
データフレームを最初の引数として追加し、角括弧内に Tulsa
列を指定し、その後に整数 2 を指定して、結果を小数点以下 2 桁に丸めます。 これは、Dallas
キーと値のペアに対して繰り返されます。
永久に変更されるように、データフレームを再割り当てできます。
City_Temp = City_Temp.fillna(
{
"Tulsa": np.round(np.mean(City_Temp["Tulsa"]), 2),
"Dallas": np.round(np.mean(City_Temp["Dallas"]), 2),
}
)
print(City_Temp)
結果がコンソールに出力されると、木曜日と金曜日の NaN
要素がタルサの平均値 77.87 に置き換えられ、水曜日の NaN
要素がダラスの平均値 89.47 に置き換えられたことがわかります。 そして木曜日。
Tulsa Dallas
Mon 78.50 83.20
Tue 80.00 93.10
Wed 75.10 89.47
Thu 77.87 89.47
Fri 77.87 92.10
NaN
値を文字列に置き換える
あなたの場合、データ型は何でもかまいませんが、その場合、次のコードを使用して NaN
値または null 値を置き換えることもできます。
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 NaN
Thu NaN NaN
Fri NaN 92.1
NaN
値を文字列に置き換える次のコードを検討してください。
df = City_Temp.fillna({"Tulsa": ".", "Dallas": "."}).fillna(0)
print(df)
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 .
Thu . .
Fri . 92.1
次のコード スニペットを使用して、NaN
値を文字列に置き換えることもできます。これは、上記のコードと同じように機能します。
print(City_Temp.fillna("."))
出力:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 .
Thu . .
Fri . 92.1
完全なコード:
# In[1]:
import numpy as np
import pandas as pd
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
# In[2]:
print(City_Temp.fillna(80.0))
# In[3]:
print(City_Temp.fillna(method="ffill"))
# In[4]:
print(City_Temp.fillna(method="bfill"))
# In[5]:
print(City_Temp.fillna(method="ffill", limit=1))
# In[6]:
City_Temp = City_Temp.fillna(
{
"Tulsa": np.round(np.mean(City_Temp["Tulsa"]), 2),
"Dallas": np.round(np.mean(City_Temp["Dallas"]), 2),
}
)
print(City_Temp)
# ##### Replace nan with string
# In[7]:
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
# In[8]:
df = City_Temp.fillna({"Tulsa": ".", "Dallas": "."}).fillna(0)
print(df)
# In[9]:
print(City_Temp.fillna("."))
その他のソリューションについては、こちら を参照してください。
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn