python - 检查应用于数据帧的 np.nan 内部函数
问题描述
这是我的代码:
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():
,使代码工作?
解决方案
np.where()
您可以在不需要apply
函数的情况下以矢量化方式轻松解决问题:
df_i2b2['TBI_var'] = np.where(df_i2b2['DIAGNOSIS_CODES'].isna(),np.nan,1)
这将返回:
id DIAGNOSIS_CODES TBI_var
0 1 338.29; 353.6; 355.9; 722.6; 724.2; E43 1.0
1 2 278.00; 300.00; 305.1; 353.6 1.0
2 3 E66.9; F32.9; F41.9; J96.10; S06 1.0
3 4 NaN NaN
推荐阅读
- swift - 单击选项卡栏图标时重置 ViewController
- angular - Angular 2+ 阻止用户导航回 Auth0 回调
- single-sign-on - 如何为 SAML Google IDP 预填电子邮件?
- javascript - 在 ejs 模板中显示数据
- mongodb - 在 MongoDB 中,如何将“$expr”与数组一起使用?
- json - JSON Lint 期待 'EOF'、'}'、','、']',得到 '{'
- javascript - 使用一个 JavaScript 文件将不同的内容加载到模态框
- mysql - 用相邻值之间的平均值填充空值,并限制另一列
- javascript - 删除验证并自动选择默认缩略图
- php - 我想减去两个不同表的 2 列