web-dev-qa-db-ja.com

pandasデータフレームは空白をNaNに置き換えます

空のセルを持つデータフレームがあり、これらの空のセルをNaNに置き換えたいと思います。このフォーラムで以前に提案された解決策は機能しますが、セルにスペースが含まれている場合に限ります。

df.replace(r'\s+',np.nan,regex=True)

このコードは、セルが空の場合は機能しません。空のセルを置き換えるパンダコードの提案はありますか。

ワネス

7
Wannes Dermauw

ここで最も簡単なことは、置換を2回行うことだと思います。

In [117]:
df = pd.DataFrame({'a':['',' ','asasd']})
df

Out[117]:
       a
0       
1       
2  asasd

In [118]:
df.replace(r'\s+',np.nan,regex=True).replace('',np.nan)

Out[118]:
       a
0    NaN
1    NaN
2  asasd
9
EdChum

他の両方の回答は、文字列内のすべての文字を考慮していません。これの方が良い:

df.replace(r'\s+( +\.)|#',np.nan,regex=True).replace('',np.nan))

その他のドキュメント: パンダの空白値(空白)をNaNに置き換える

3
Guido

これはどう?

df.replace(r'\s+|^$', np.nan, regex=True)
2
UNagaswamy

すでに見てきたように、明らかなことを行い、replace()をNoneに置き換えると、エラーがスローされます。

df.replace('', None)
TypeError: cannot replace [''] with method pad on a DataFrame

解決策は、単に空の文字列をnumpyのNaNに置き換えることのようです。

import numpy as np
df.replace('', np.NaN)

Pd.NaNがすべてのEdgeケースでnp.NaNとまったく同じように扱われるかどうかは、100%確信できませんが、問題はありません。 fillna()は機能し、np.NaNの代わりにデータベースにNULLを永続化して機能し、NaNをcsvに永続化して機能します。

(パンダバージョン18.1)

1
deepgeek