这是我的密码:
import numpy as np
import pandas as pd
df_i2b2 = pd.DataFrame({'id':[1,2,3,4],
'DIAGNOSIS_CODES':["338.29; 353.6; 355.9; 722.6; 724.2; E43",
"278.00; 300.00; 305.1; 353.6",
"E66.9; F32.9; F41.9; J96.10; S06",
np.nan]})
def diag_TBI(my_str):
if my_str.isna():
return np.nan
else:
return 1
df_i2b2['TBI_var'] = df_i2b2['DIAGNOSIS_CODES'].apply(diag_TBI)
df_i2b2['TBI_var'].value_counts(dropna = False)
输出:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
c:\Arch\Work\Register\a_Code\Snippets\i2b2test_NA_SO_Question.py in
18
19
---> 20 df_i2b2['TBI_var'] = df_i2b2['DIAGNOSIS_CODES'].apply(diag_TBI)
21 df_i2b2['TBI_var'].value_counts(dropna = False)
22
~\Anaconda3\envs\lake_reg2\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
3846 else:
3847 values = self.astype(object).values
-> 3848 mapped = lib.map_infer(values, f, convert=convert_dtype)
3849
3850 if len(mapped) and isinstance(mapped[0], Series):
pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()
c:\Arch\Work\Register\a_Code\Snippets\i2b2test_NA_SO_Question.py in diag_TBI(my_str)
11
12 def diag_TBI(my_str):
---> 13 if my_str.isna():
14 return np.nan
15 else:
AttributeError: 'str' object has no attribute 'isna'
问题:如何检查应用于它的函数中的数据帧中的np.nan
?如何修改if my_str.isna():
,使代码正常工作
尽管@Celiussting,但她的答案更适合这样做。您可以使用以下技巧检查函数中的NaN:
输出:
注意:在Python中,NaN==NaN返回False
您可以使用
np.where()
以向量化的方式轻松解决问题,而不需要apply
函数:这将返回:
相关问题 更多 >
编程相关推荐