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

如何基于DataFrame列条件正确向Python列表追加数据?

问题分析与解决

你的问题出在嵌套循环和错误的条件判断:

  • 外层遍历data.Result,内层又遍历整个data.UNITS列,导致每个Result被重复处理(次数等于DataFrame的行数),自然生成过多元素。
  • data.UNITS.any() == 'mg/kg'是检查整个UNITS列是否存在'mg/kg',不是判断当前行的单位,逻辑完全错误。

另外要注意Result列里有'ND'字符串,直接乘1000会报错,得先处理这种情况。


修改方案

方案1:用zip同步遍历每行的Result和UNITS

直接对应每行的两个字段,一次循环完成:

result_value = []
detection_limit_unit = []

# 处理单位列(原逻辑保留)
for unit in data.UNITS:
    if unit == 'mg/kg':
        detection_limit_unit.append('ug/kg')
    else:
        detection_limit_unit.append(unit)

# 同步遍历每行的Result和对应Unit
for res, unit in zip(data.Result, data.UNITS):
    if unit == 'mg/kg':
        # 处理ND的情况,按需调整逻辑
        if res == 'ND':
            result_value.append('ND')
        else:
            # 确保数值类型后计算
            result_value.append(float(res) * 1000)
    else:
        # 非mg/kg单位直接保留原Result,或替换为RL(需提前定义RL)
        result_value.append(res if res != 'ND' else res)

方案2:用Pandas原生方法(更简洁高效)

避免循环,直接用列操作:

# 处理单位列
data['detection_limit_unit'] = data['UNITS'].replace('mg/kg', 'ug/kg')

# 定义转换逻辑
def convert_result(row):
    if row['UNITS'] == 'mg/kg':
        if row['Result'] == 'ND':
            return 'ND'
        return float(row['Result']) * 1000
    else:
        return row['Result']

# 生成结果列,转成列表
data['result_value'] = data.apply(convert_result, axis=1)
result_value = data['result_value'].tolist()
detection_limit_unit = data['detection_limit_unit'].tolist()

关键说明

  • 必须逐行对应Result和UNITS的关系,不能嵌套遍历整个列。
  • 一定要处理'ND'这种非数值的情况,否则会触发类型错误。
  • 如果RL是固定值,把方案里的res替换成RL即可(需确保RL已定义且类型匹配)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:15:45