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

使用列表推导式对DataFrame做标量运算时如何保留非数值列

列丢失的原因是select_dtypes(include=['number'])仅会返回筛选后的数值类型列,非数值的date列被直接排除在返回结果之外,因此最终结果中不存在这一列。

解决方案1:单行列表推导式实现

使用assign方法仅更新指定列,保留所有原始列:

dfs = [df.assign(**{col: df[col] * 100 for col in df.select_dtypes(include=['int']).columns}) for df in dfs]

该写法通过字典推导式批量提取所有int类型列做乘100运算,assign方法会保留原DataFrame的所有非数值列,仅更新指定的数值列。

解决方案2:封装为工具函数(可读性更高)

如果列表推导式太长可读性差,可以封装为独立函数处理,同时支持避免修改原始DataFrame:

def process_df(df, multiplier=100):
    # 提取所有int类型列名
    int_cols = df.select_dtypes(include=['int']).columns
    # 复制原对象避免修改源数据,不需要保留原数据可删除这一行
    df = df.copy()
    df[int_cols] *= multiplier
    return df

dfs = [process_df(df) for df in dfs]

如果你的场景允许修改原始DataFrame,可以删除df.copy()这一行,执行性能会更好。

内容的提问来源于stack exchange,提问作者Anirban Nag 'tintinmj'

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:30:02