fillnaの基本的な使い方
Pandasの fillna
メソッドは、データフレーム内の欠損値(NaN)を指定した値で置き換えるためのメソッドです。基本的な使い方は以下の通りです。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [5, np.nan, np.nan],
'C': [1, 2, 3]
})
print("Original DataFrame:")
print(df)
# fillnaを用いてNaNを0で置き換え
df_filled = df.fillna(0)
print("\nDataFrame after fillna:")
print(df_filled)
このコードを実行すると、元のデータフレーム内のNaNが0に置き換えられた新しいデータフレームが出力されます。fillna
メソッドは新しいデータフレームを返すため、元のデータフレームは変更されません。元のデータフレームを直接変更したい場合は、 fillna
メソッドに inplace=True
を指定します。ただし、この操作は元のデータを変更するため注意が必要です。
特定の列だけをfillnaする方法
特定の列だけをfillnaするには、その列を選択して fillna
メソッドを適用します。以下にその方法を示します。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [5, np.nan, np.nan],
'C': [1, 2, 3]
})
print("Original DataFrame:")
print(df)
# 'B'列だけをfillnaで0に置き換え
df['B'] = df['B'].fillna(0)
print("\nDataFrame after fillna on 'B':")
print(df)
このコードを実行すると、’B’列のNaNが0に置き換えられます。他の列は変更されません。このように、特定の列だけを選択してfillnaを適用することで、データフレームの一部だけを変更することができます。
複数の列を一度にfillnaする方法
複数の列を一度にfillnaするには、fillnaメソッドに辞書を渡します。辞書のキーは列の名前、値はその列のNaNを置き換える値です。以下にその方法を示します。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [5, np.nan, np.nan],
'C': [1, 2, 3]
})
print("Original DataFrame:")
print(df)
# 'A'列のNaNを0、'B'列のNaNを-1で置き換え
df.fillna({'A': 0, 'B': -1}, inplace=True)
print("\nDataFrame after fillna on 'A' and 'B':")
print(df)
このコードを実行すると、’A’列のNaNが0に、’B’列のNaNが-1に置き換えられます。他の列は変更されません。このように、fillnaメソッドに辞書を渡すことで、複数の列を一度にfillnaすることができます。
NaNをリストで置き換える方法
Pandasの fillna
メソッドを使ってNaNをリストで置き換えることは直接的にはできません。なぜなら、Pandasのデータフレームは一般的にスカラー値(数値、文字列など)を要素として持つためです。しかし、リストのような複数の値を持つ列を作成するためには、Pythonのリストを要素とする新しい列を作成し、その列に対して fillna
メソッドを適用することで実現できます。以下にその方法を示します。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [5, np.nan, np.nan],
'C': [1, 2, 3]
})
print("Original DataFrame:")
print(df)
# 'A'列のNaNをリストで置き換え
df['A'] = df['A'].apply(lambda x: [0] if pd.isna(x) else x)
print("\nDataFrame after replacing NaN in 'A' with a list:")
print(df)
このコードを実行すると、’A’列のNaNがリスト [0]
に置き換えられます。他の列は変更されません。このように、 apply
メソッドと lambda
関数を組み合わせることで、NaNをリストで置き換えることができます。ただし、この方法は列の他の要素がスカラー値である場合には適用できません。列のすべての要素がリストである必要があります。