簡體   English   中英

Python Pandas 將多列零替換為 Nan

[英]Python Pandas replace multiple columns zero to Nan

列出加載到 Pandas 數據幀df2的人員的屬性。 為了清理,我想用np.nan替換零值( 0'0' )。

df2.dtypes

ID                   object
Name                 object
Weight              float64
Height              float64
BootSize             object
SuitSize             object
Type                 object
dtype: object

將零值設置為np.nan工作代碼:

df2.loc[df2['Weight'] == 0,'Weight'] = np.nan
df2.loc[df2['Height'] == 0,'Height'] = np.nan
df2.loc[df2['BootSize'] == '0','BootSize'] = np.nan
df2.loc[df2['SuitSize'] == '0','SuitSize'] = np.nan

相信這可以通過類似/更短的方式完成:

df2[["Weight","Height","BootSize","SuitSize"]].astype(str).replace('0',np.nan)

但是,以上不起作用。 零留在 df2 中。 如何解決這個問題?

我認為你需要replace dict replace

cols = ["Weight","Height","BootSize","SuitSize","Type"]
df2[cols] = df2[cols].replace({'0':np.nan, 0:np.nan})

您可以使用 'replace' 方法並將要在列表中替換的值作為第一個參數傳遞,並將所需的值作為第二個參數傳遞:

cols = ["Weight","Height","BootSize","SuitSize","Type"]
df2[cols] = df2[cols].replace(['0', 0], np.nan)

嘗試:

df2.replace(to_replace={
             'Weight':{0:np.nan}, 
             'Height':{0:np.nan},
             'BootSize':{'0':np.nan},
             'SuitSize':{'0':np.nan},
                 })
data['amount']=data['amount'].replace(0, np.nan)
data['duration']=data['duration'].replace(0, np.nan)

另一種替代方式:

cols = ["Weight","Height","BootSize","SuitSize","Type"]
df2[cols] = df2[cols].mask(df2[cols].eq(0) | df2[cols].eq('0'))

在“年齡”列中,用空格替換零

df['age'].replace(['0', 0'], '', inplace=True)

用 nan 替換單列的零

df['age'] = df['age'].replace(0, np.nan)

用 nan 替換多列的零

cols = ["Glucose", "BloodPressure", "SkinThickness", "Insulin", "BMI"]

df[cols] = df[cols].replace(['0', 0], np.nan)

用 nan 替換數據幀的零

df.replace(0, np.nan, inplace=True)

如果您只想替換整個數據框中的零,則可以直接替換它們而無需指定任何列:

df = df.replace({0:pd.NA})

暫無
暫無

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

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