[解決済み】pandasで空白値(ホワイトスペース)をNaNに置き換える。
2022-04-07 05:02:35
質問
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ではないし、pandasの最も効率的な使い方でもないでしょう。各カラムをループして、各値を正規表現で検索する関数を適用して生成したカラムマスクに対してブーリアン置換を行い、ホワイトスペースにマッチさせています。
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
.
解決方法は?
私が思うに
df.replace()
はその役割を果たします。
パンダ0.13
:
df = pd.DataFrame([
[-0.532681, 'foo', 0],
[1.490752, 'bar', 1],
[-1.387326, 'foo', 2],
[0.814772, 'baz', ' '],
[-0.222552, ' ', 4],
[-1.176781, 'qux', ' '],
], columns='A B C'.split(), index=pd.date_range('2000-01-01','2000-01-06'))
# replace field that's entirely space (or empty) with NaN
print(df.replace(r'^\s*$', np.nan, regex=True))
プロデュースします。
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
として
テマク
を使用してください。
df.replace(r'^\s+$', np.nan, regex=True)
は、有効なデータに空白が含まれている場合に使用します。
関連
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み] NaN値をチェックするにはどうすればよいですか?
-
[解決済み] Pandas DataFrameの特定の列の値がNaNである行を削除する方法
-
[解決済み] Pandasのデータフレームから行を選択するために値のリストを使用する
-
[解決済み] Pandas DataFrameの値がNaNであるかどうかを確認する方法
-
[解決済み】PandasでSettingWithCopyWarningに対処する方法
-
[解決済み】Pandas NaNを空文字列に置換する。
-
[解決済み】Pandas DataframeのカラムでNaN値をゼロに置き換えるには?
-
[解決済み] pandas.read_csvが空の値をnanではなく空文字列として読み込むようにする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み] Python Pandasは1列目のNaNを2列目の対応する行の値で置き換えます。