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

如何用Lambda函数将Pandas DataFrame单元格数值范围转为平均值

解决方案:处理Pandas DataFrame中"n1-n2"格式的列值转换

针对你的需求,最Pythonic的实现方式是结合pd.Series.apply()和lambda函数,一行代码完成格式转换与值计算:

import pandas as pd

# 假设你的DataFrame名为df,目标列名为target_col
df['target_col'] = df['target_col'].apply(
    lambda x: (float(x.split('-')[0]) + float(x.split('-')[1])) / 2
    if isinstance(x, str) and '-' in x
    else float(x) if pd.notna(x) else x
)

逻辑说明:

  • 遍历列中每个元素,先判断是否为包含-的字符串:
    • 若是,拆分出n1和n2,转换为浮点型后计算平均值
  • 对于非该格式的元素:
    • 尝试转换为浮点型(兼容原本就是数字或可转成数字的单元格)
    • 保留空值(如果存在NaN或None)

进阶:处理无效值

如果列中存在无法转换的无效内容(比如非数字字符串),可以将逻辑封装为函数后在apply中调用(lambda无法直接处理try-except):

def convert_value(x):
    try:
        if isinstance(x, str) and '-' in x:
            n1, n2 = x.split('-')
            return (float(n1) + float(n2)) / 2
        return float(x)
    except (ValueError, TypeError):
        return pd.NA  # 替换为你需要的默认值,比如0或None

df['target_col'] = df['target_col'].apply(convert_value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:49:53