如果Nan位于单独的行中,请用Nan替换值-熊猫

时间:2019-11-01 01:07:06

标签: python pandas dataframe

我在./node_modules/react-redux/es/index.js Module not found: Can't resolve '/Users/danielcraig/Documents/ill/ill/node_modules/react-scripts/node_modules/babel-loader/lib/index.js' in '/Users/danielcraig/Documents/ill/ill' 中有一列,其中包含许多字符串。我本来是用dfreplace的一些字符串,但是有太多的列表可用于Nan这些值。我有一个单独的列,其中确实包含replace值,可用于实现此目的。

我想在Nanreplace个特定的字符串。试想一下,如果此列包含1000个不同的字符串,而我想将Valuereplace一起使用500。使用这些不需要的字符串创建列表并将其替换为Nan

效率不高

有单独的列Nan,显示(X)值,可用于Nan中的replace行。因此,在ValueX的地方,将Nan中的行替换为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)

2 个答案:

答案 0 :(得分:1)

我们可以做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

答案 1 :(得分:1)

您想要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())