如何用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
相关产品推荐
相关产品推荐

