簡體   English   中英

其中 function 忽略楠

[英]Where function ignoring Nan

我正在嘗試使用 where function 而忽略 Nan,我不想放棄或更換 Nans。

這是一個玩具數據集:

df=pd.DataFrame({
                 'A':[8,39,40,52],
                 'B':[8,39,np.nan,50],
                 })

這使:

    A    B
0   8   8.0
1   39  39.0
2   40  NaN
3   52  50.0

期望的結果:

    A   B       check
0   8   8.0     True
1   39  39.0    True
2   40  NaN     Nan
3   52  50.0    False

我嘗試了以下代碼,但沒有奏效:

df = ((np.where(df['A']== df['B'], True, False))| df.isnull())

只需做一個where

df['A'].eq(df['B']).where(df[['A','B']].notna().all(1))

但這會沮喪 upcast True, False to float

您可以在任一列中有NaN的地方使用掩碼,然后使用 boolean 掩碼將np.nan插入其中。

m = df.isna().any(axis=1)
df['check'] = df['A'].eq(df['B'])
df.loc[m, 'check'] = np.nan # This would upcast bools to floats.

一種解決方法是使用Series.astypecheck列的 dtype 設為object

m = df.isna().any(axis=1)
df['check'] = df['A'].eq(df['B'])
df['check'] = df['check'].astype(object)
df.loc[m, 'check'] = np.nan

   A     B  check
0   8   8.0   True
1  39  39.0   True
2  40   NaN    NaN
3  52  50.0  False
#Using df.apply
import pandas as pd
import numpy as np

df=pd.DataFrame({
             'A':[8,39,40,52],
             'B':[8,39,np.nan,50],
             })
def check(df):

    if not (pd.isnull(df["A"]) or pd.isnull(df["B"])):
        if df["A"]==df["B"]:
            return "True"
        else:
            return "False"
    else:
        return "Nan"
df["check"]=""
df["check"]=df.apply(check,axis=1)
print(df)

output:
    A     B  check
0   8   8.0   True
1  39  39.0   True
2  40   NaN    Nan
3  52  50.0  False

暫無
暫無

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

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