首页 > 解决方案 > pandas.DataFrame.apply() 使用方括号过滤时产生 NaN

问题描述

import pandas as pd
df = pd.DataFrame({"First_Column": [-2,-1,1,2,3]})
df['Second_Column']='Good'
df.loc[:, 'Second_Column']=df[df.First_Column>0]['Second_Column'].apply(lambda x: 'Bad')

当我运行它时,我得到Badand NaNSecond_Column而不是Goodand Bad。为什么apply()用 覆盖不符合条件的值NaN

标签: pythonpandasdataframenan

解决方案


通过使用mask

df.Second_Column=df.Second_Column.mask(df.First_Column>0,'Bad')
df
Out[441]: 
   First_Column Second_Column
0            -2          Good
1            -1          Good
2             1           Bad
3             2           Bad
4             3           Bad

或者

df.loc[df.First_Column>0,'Second_Column']='Bad'
df
Out[443]: 
   First_Column Second_Column
0            -2          Good
1            -1          Good
2             1           Bad
3             2           Bad
4             3           Bad

或者使用np.where更直接的

df['Second_Column']=np.where(df.First_Column>0,'Bad','Good')
df
Out[445]: 
   First_Column Second_Column
0            -2          Good
1            -1          Good
2             1           Bad
3             2           Bad
4             3           Bad

推荐阅读