python - 有没有更好的方法来处理 NaN 值?
问题描述
我有一个输入数据框
KPI_ID KPI_Key1 KPI_Key2 KPI_Key3 A (C602+C603) C601 75 B (C605+C606) C602 NaN C 75 L239+C602 NaN D (32*(C603+44)) 75 南 E L239 南 C601
我有一个指标 df
99 75 C604 C602 C601 C603 C605 C606 44 L239 32 患者 ID 1 1 0 1 0 1 0 0 0 1 0 1 2 0 0 0 0 0 0 1 1 0 0 0 3 1 1 1 1 0 1 1 1 1 1 1 4 0 0 0 0 0 1 0 1 0 1 0 5 1 0 1 1 1 1 0 1 1 1 1
资源:
input_df = pd.DataFrame({'KPI_ID': ['A','B','C','D','E'], 'KPI_Key1': ['(C602+C603)','(C605+ C606)','75','(32*(C603+44))','L239'] , 'KPI_Key2' : ['C601','C602','L239+C602','75',np. NaN] , 'KPI_Key3' : ['75',np.NaN,np.NaN,np.NaN,'C601']}) indicator_df = pd.DataFrame({'PatientID': [1,2,3,4,5],'99' : ['1','0','1','0','1'],' 75' : ['0','0','1','0','0'],'C604' : ['1','0','1','0','1'] ,'C602' : ['0','0','1','0','1'],'C601' : ['1','0','0','0','1 '],'C603' : ['0','0','1','1','1'],'C605' : ['0','1','1','0', '0'],'C606' : ['0','1','1','1','1'],'44' : ['1','0','1','0 ','1'],'L239' : ['0','0','1','1','1'],'32' : ['1','0','1','0','1'],}).set_index('PatientID')
我的目标是创建一个像这样的输出 df (通过针对 indicator_df 评估 input_df )
final_out_df: 患者 ID KPI_ID KPI_Key1 KPI_Key2 KPI_Key3 1 一个 0 1 0 2 一个 0 0 0 3 一个 2 0 1 4 一个 1 0 0 5 一个 2 1 0 1 B 0 0 0 2 乙 2 0 0 3 乙 2 1 0 ……………………
我非常接近,我的逻辑工作正常,除了我无法处理 input_df 中的 NaN 值。我能够生成 KPI_ID 'A' 的输出,因为三个公式都没有(KPI_Key1、KPI_Key2、KPI_Key3 for 'A' ) 为空。但我无法为“B”生成它。除了使用虚拟变量代替 NaN 并在 indicator_df 中创建该行之外,我能做些什么吗?这是我到目前为止所做的:
指标_df = 指标_df.astype('int32') final_out_df = pd.DataFrame() out_df = pd.DataFrame(index=indicator_df.index) out_df.reset_index(level=0, inplace=True) final_out_df = pd.DataFrame() #running 循环只用于'A',所以它不会失败 对于范围内的我(0,len(input_df)-4): 对于 ['KPI_Key1','KPI_Key2','KPI_Key3'] 中的 j: exp = input_df[j].iloc[i] temp_out_df=indicator_df.eval(re.sub(r'(\w+)', r'`\1`', exp)).reset_index(name=j) out_df['KPI_ID'] = input_df['KPI_ID'].iloc[i] out_df = out_df.merge(temp_out_df, on='PatientID', how='left') final_out_df=final_out_df.append(out_df) out_df = pd.DataFrame(index=indicator_df.index) out_df.reset_index(level=0, inplace=True)
解决方案
我能够通过添加来解决它:
if exp == exp:
在解析之前exp
通过regex
.
推荐阅读
- firebase - 获取当前用户时未设置我的变量
- reactjs - 反应 - 在谷歌云存储上调整图像大小 - 使用存储桶时出错
- pylint - 运行pylint时如何默认运行pylintrc文件?
- javascript - 如何从 HTML 中停止“setInterval”
- javascript - 如何从 Firebase 云功能发送自定义响应?
- unity3d - Google XR 纸板插件中没有 3D 深度
- java - 如何检查字符串是否有一个点,但不是在前面或最后?
- javascript - discord.js 状态'无法读取 null 的属性'setActivity''
- azure - 将消息从 Azure 队列移动到数据库
- react-native - React Native:如何使用 onpress 功能创建下拉按钮