在数据框中用字符串值替换NaN。

4
我希望能够将数据框中的某一列缺失值替换为"missing value"。 我尝试过

result['emp_title'].fillna('missing')

或者

result['emp_title'] = result['emp_title'].replace({ np.nan:'missing'})

第二个代码可以正常工作,因为在此代码后统计缺失值时:
result['emp_title'].isnull().sum()

它给了我一个0。 然而,第一个并没有像我预期的那样工作,它没有给我一个0,而是之前缺失值的计数。 为什么第一个不起作用呢?谢谢!


3
result['emp_title'] = result['emp_title'].fillna('missing') 的作用是将缺失值替换为'missing',但它不会直接在原数据中进行更改,而是返回一个新的Series。 - MaxU - stand with Ukraine
1
result['emp_title'].fillna('missing', inplace=True) - BENY
1个回答

12

您需要填充inplace,或者进行赋值:

result['emp_title'].fillna('missing', inplace=True)

或者

result['emp_title'] = result['emp_title'].fillna('missing') 

MVCE:

In [1697]: df = pd.DataFrame({'Col1' : [1, 2, 3, np.nan, 4, 5, np.nan]})

In [1702]: df.fillna('missing'); df # changes not seen in the original
Out[1702]: 
   Col1
0   1.0
1   2.0
2   3.0
3   NaN
4   4.0
5   5.0
6   NaN

In [1703]: df.fillna('missing', inplace=True); df
Out[1703]: 
      Col1
0        1
1        2
2        3
3  missing
4        4
5        5
6  missing

请注意,如果您试图将fillna应用于切片,请不要使用inplace=True,而是使用df.loc/iloc并分配给子切片:

In [1707]: df.Col1.iloc[:5].fillna('missing', inplace=True); df # doesn't work
Out[1707]: 
   Col1
0   1.0
1   2.0
2   3.0
3   NaN
4   4.0
5   5.0
6   NaN

In [1709]: df.Col1.iloc[:5] = df.Col1.iloc[:5].fillna('missing')

In [1710]: df
Out[1710]: 
      Col1
0        1
1        2
2        3
3  missing
4        4
5        5
6      NaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接