空白(任意の量)を含むPandasデータフレーム内のすべての値を検索し、それらの値をNaNで置き換えたい。
これを改善する方法はありますか?
基本的に私はこれを変えたいです:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
これに:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
以下のコードでなんとかできましたが、醜いです。Pythonicではなく、パンダの最も効率的な使用法でもないと私は確信しています。各列をループし、空白に一致する各値の正規表現検索を実行する関数を適用して生成された列マスクに対してブール値の置換を行います。
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
空の文字列を含む可能性のあるフィールドを反復するだけで、少し最適化できます。
if df[i].dtype == np.dtype('object')
しかし、それはあまり改善されていません
そして最後に、このコードはターゲット文字列をNoneに設定します。これはのようなPandasの関数で機能しますがfillna()
、実際にのNaN
代わりに直接を挿入できれば完全性のために良いでしょうNone
。
replace
、正規表現で使用できるようにすることです...(おそらくこれは機能としてリクエストする必要があります)。