簡體   English   中英

如果 Nan 在單獨的行中,則將值替換為 Nan - Pandas

[英]Replace value with Nan if Nan in separate row - Pandas

我在df中有一個包含許多字符串的列。 我打算用Nan replace一些字符串,但是列出的字符串太多了,可以用來replace這些值。 我有一個單獨的列,其中包含Nan值,可用於實現此目的。

我想replace Value中的特定字符串。 想象一下,如果這個列包含 1000 個不同的字符串,我想用Nan replace 500 。 用這些不需要的字符串創建一個列表並用它來替換Nan效率低下

有一個單獨的列(X)顯示可用於replace Value 中的行的Nan Value 因此,如果XNan ,請將Value中的行替換為Nan

有沒有更簡單的方法來做到這一點?

df = pd.DataFrame({        
    'Value' : ['B','A','X','Y','C','D','E','F','G','H','I'],
    'X' : ['A','A','A','A',np.nan,'A','A','A',np.nan,'A','A'],  
    })

df = df.loc[df['X'].eq(np.nan), df['Value']] = np.nan
print(df)

預期 Output:

   Value    X
0      B    A
1      A    A
2      X    A
3      Y    A
4      Nan  NaN
5      D    A
6      E    A
7      F    A
8      NaN  NaN
9      H    A
10     I    A

你想要DataFrame.maskSeries.isna

df=df.mask(df['X'].isna())
print(df)

   Value    X
0      B    A
1      A    A
2      X    A
3      Y    A
4    NaN  NaN
5      D    A
6      E    A
7      F    A
8    NaN  NaN
9      H    A
10     I    A

您也可以將DataFrame.whereSeries.notna一起使用

df=df.where(df['X'].notna())

我們可以做dropna + reindex

df=df.dropna().reindex(df.index)
   Value    X
0      B    A
1      A    A
2      X    A
3      Y    A
4    NaN  NaN
5      D    A
6      E    A
7      F    A
8    NaN  NaN
9      H    A
10     I    A

暫無
暫無

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

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