You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas含NaN列自动转浮点数,SDTM字符列LBORRES如何保留整数无小数

问题解答

这个需求完全可以实现。你遇到的整数自动转带.0后缀的浮点数格式问题,根源是Pandas读取含缺失值的数值列时,会默认将列类型转换为float64,直接对该类型的整数值做字符串转换时就会出现格式异常,按以下方法调整即可解决:


核心修改方案

方案1:调整LBORRES字段的转换逻辑(改动最小,无需修改上游读入逻辑)

把你原来给LBORRES赋值的代码替换为带类型判断的逻辑,示例如下:

for index, row in df.iterrows():
    for k,v in labos.iterrows(): 
        if row['ID'] != 'NULL' and f"{v['CATEGORY']}" == 'NFS':
            val = row[f"{v['VAR']}"]
            # 处理LBORRES的格式
            if val == 'NULL':
                lbor_val = ''
            else:
                # 数值类型做特殊处理
                if isinstance(val, (int, float)):
                    # 浮点数但为整数值的情况,去掉小数位
                    if isinstance(val, float) and val.is_integer():
                        lbor_val = str(int(val))
                    else:
                        lbor_val = str(val)
                else:
                    # 字符串类结果(positive/negative等)直接保留
                    lbor_val = str(val)
            # 写入新行
            tmp_df_laboratory = tmp_df_laboratory.append({
                ...
                'LBORRES' : lbor_val,
                'LBSTRESN' : val if val != 'NULL' else np.nan,
            },ignore_index=True)

方案2:从数据读入环节避免自动类型转换(更彻底,推荐)

读取实验室数据csv时,指定所有结果列的类型为object,避免Pandas自动将含缺失值的整数列转成float:

# 读取时指定dtype,不确定结果列名的话可以直接全表按object读入
df_laboratory = pd.read_csv('./csv/source/biologie_labo.csv', delimiter=",", dtype=object).fillna('NULL')

这样读入的数值都会保留原始的字符串格式,直接赋值给LBORRES即可,不需要额外做类型判断。


注意事项

  • 若你的数据量较大,建议避免使用iterrows遍历,可以改用apply或者矢量化操作提升效率,上述格式转换逻辑可以直接复用。
  • 生成xpt文件前可以额外校验LBORRES列的格式,确认整数无.0后缀、文本结果正常、空值符合SDTM规范要求。

内容的提问来源于stack exchange,提问作者Mereva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:48:01