什么是最好的,也是最简单的改写NaNs的方法,同时注意不同的情况?
在本例df中,我想根据业务逻辑替换Routed (Expected) Site中的NaNs:
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)
我也尝试了一下,不知何故用None覆盖了所有的Routed (Expected) Site
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'])发布于 2019-10-30 03:27:12
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)发布于 2019-10-30 03:27:08
如上所述,您可以执行以下操作:
# 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)https://stackoverflow.com/questions/58614010
复制相似问题