Python 可靠地处理熊猫中的NAN

Python 可靠地处理熊猫中的NAN,python,pandas,Python,Pandas,什么是最好的,希望也是最简单的方法来写NAN,同时注意不同的情况 在本例中,df,我想根据业务逻辑替换路由(预期)站点中的NAN: DBN DBN - Exam Routed (Expected) Site 00000A 00000A - Scie A00000 750000 750000 - Scie NaN 840000 840000 - Scie NaN 我想要

什么是最好的,希望也是最简单的方法来写NAN,同时注意不同的情况

在本例中,
df
,我想根据业务逻辑替换
路由(预期)站点
中的NAN:

   DBN     DBN - Exam Routed (Expected) Site
00000A  00000A - Scie                 A00000
750000  750000 - Scie                    NaN
840000  840000 - Scie                    NaN
我想要

   DBN     DBN - Exam Routed (Expected) Site
00000A  00000A - Scie                 A00000
750000  750000 - Scie          75 (Hospital)
840000  840000 - Scie           84 (Charter)
我使用的代码实际上并没有指出NaN是哪种情况:

df['Routed(Expected)Site'].fillna('Charter or Hospital',inplace=True)

我还尝试了这个方法,它以某种方式用
覆盖了所有
路由(预期)站点

def routed_site_exceptions(DBN, routed_site):
    DBN = str(DBN)
    if DBN.startswith("84") and not routed_site:
        return '84 (Charter)'
    if DBN.startswith('75') and not routed_site:
        return '75 (Hospital)'
df['Routed (Expected) Site'] = np.vectorize(routed_site_exceptions)(df['DBN'],
                                                                    df['Routed (Expected) Site'])

如前所述,您可以执行以下操作:

# get the new values
s = df.DBN.str[:2].map({'75': '75 (Hospital)',
                        '84': '84 (Charter)'})

# map to the data
df['Routed (Expected) Site'].fillna(s, inplace=True)
输出:

      DBN     DBN - Exam Routed (Expected) Site
0  00000A  00000A - Scie                 A00000
1  750000  750000 - Scie          75 (Hospital)
2  840000  840000 - Scie           84 (Charter)
fillna
map
我假设我不知道您的业务逻辑将包含的所有内容。所以我把它概括起来

def routed_site_exceptions(DBN):
    DBN = str(DBN)
    if DBN.startswith("84"):
        return '84 (Charter)'
    if DBN.startswith('75'):
        return '75 (Hospital)'

df.fillna({'Routed (Expected) Site': df.DBN.map(routed_site_exceptions)})

      DBN     DBN - Exam Routed (Expected) Site
0  00000A  00000A - Scie                 A00000
1  750000  750000 - Scie          75 (Hospital)
2  840000  840000 - Scie           84 (Charter)

谢谢,我使用了:``def routed_site_exceptions(DBN):''替换包括特许学校和D79学校在内的异常路由站点。仅在一开始不存在值时使用:param DBN:string |:return:string | status |''DBN=str(DBN)if DBN.startswith(“84”):return'84(Charter)'if DBN.startswith('75'):return'75(医院)'df['Routed(预期)Site'].fillna(df['DBN'].map(路由站点异常),inplace=True)```