簡體   English   中英

如何在熊貓中用NaN替換浮點值?

[英]How to replace a float value with NaN in pandas?

我知道熊貓中的替換功能: https : //pandas.pydata.org/pandas-docs/stable/generation/pandas.DataFrame.replace.html

但是我已經完成了這個簡單的測試,當我嘗試替換浮點值時,它無法按預期工作:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
print(df.head(n=1))

      A         B        C         D
0  1.437202  1.919894 -1.40674 -0.316737

df = df.replace(1.437202, np.nan)
print(df.head(n=1))

      A         B        C         D
0  1.437202  1.919894 -1.40674 -0.316737

如您所見,[[0],[0]]沒變……關於這可能是什么的任何想法?

問題是浮點精度,因此使用帶mask numpy.isclose函數:

np.random.seed(123)
df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
print(df.head(n=1))
          A         B         C         D
0 -1.085631  0.997345  0.282978 -1.506295

df = df.mask(np.isclose(df.values, 0.997345))

或使用numpy.where

arr = np.where(np.isclose(df.values, 0.997345), np.nan, df.values)
df = pd.DataFrame(arr, index=df.index, columns=df.columns)

print(df.head(n=1))
          A   B         C         D
0 -1.085631 NaN  0.282978 -1.506295

編輯:您還可以通過select_dtypes僅獲取數字列,以使用[]進行子集過濾:

np.random.seed(123)
df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD')).assign(E='a')

cols = df.select_dtypes(np.number).columns
df[cols] = df[cols].mask(np.isclose(df[cols].values, 0.997345))
print(df.head(n=1))
          A   B         C         D  E
0 -1.085631 NaN  0.282978 -1.506295  a

特定索引的另一招:

>>> print(df.head(n=1))
          A         B         C         D
0 -0.042839  1.701118  0.064779  1.513046

>>> df['A'][0] = np.nan

>>> print(df.head(n=1))
    A         B         C         D
0 NaN  1.701118  0.064779  1.513046

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM