1. ホーム
  2. python

[解決済み] Python Pandasで複数の列を適当に埋める

2022-02-09 04:37:40

質問内容

pandasのdataFrameには文字列と数値が混在しています。文字列のNAN値を'.'で、float列のNAN値を0に置き換えたいのですが、可能でしょうか?

この小さな架空の例を考えてみましょう。

df = pd.DataFrame({'Name':['Jack','Sue',pd.np.nan,'Bob','Alice','John'],
    'A': [1, 2.1, pd.np.nan, 4.7, 5.6, 6.8],
    'B': [.25, pd.np.nan, pd.np.nan, 4, 12.2, 14.4],
    'City':['Seattle','SF','LA','OC',pd.np.nan,pd.np.nan]})

これで、3行でできるようになりました。

df['Name'].fillna('.',inplace=True)
df['City'].fillna('.',inplace=True)
df.fillna(0,inplace=True)

これは小さなデータフレームなので、3行でOKでしょう。私の実際の例では(データの機密保持のためにここでは紹介できませんが)、もっと多くの文字列カラムと数値カラムがあります。そのため、fillnaのためだけに何行も書いてしまうのです。これを簡潔に行う方法はありますか?

どのように解決するのですか?

を使用することができます。 apply をチェックしながら、カラムに dtype であるかどうか numeric をチェックすることで dtype.kind :

res = df.apply(lambda x: x.fillna(0) if x.dtype.kind in 'biufc' else x.fillna('.'))

print(res)
     A      B     City   Name
0  1.0   0.25  Seattle   Jack
1  2.1   0.00       SF    Sue
2  0.0   0.00       LA      .
3  4.7   4.00       OC    Bob
4  5.6  12.20        .  Alice
5  6.8  14.40        .   John