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

如何同时对两个DataFrame应用同一个lambda函数?

一行代码批量处理多个DataFrame的列

嘿,我来帮你搞定这个问题!你想要用一行代码同时给两个DataFrame的A列应用同一个lambda函数,其实有几个简单的方案,还能解决你用map时遇到的困惑。

方法1:直接修改原DataFrame(一行完成)

用列表推导式就能在一行内直接修改两个DataFrame的目标列,完全贴合你的需求:

[df['A'] = df['A'].apply(lambda x: float(x)) for df in [df1, df2]]

这个写法会遍历列表里的每个DataFrame,直接把它们的A列从字符串转成浮点型。虽然列表推导式通常用来生成列表,但这里利用它的迭代执行特性完成赋值操作,完美满足“一行代码”的要求。

方法2:用map生成新的DataFrame(不改动原数据)

如果你不想修改原DataFrame,而是生成新的副本,可以用map配合assign方法,记得要把map对象转换成列表(因为map是惰性迭代器,不迭代的话不会执行里面的函数):

new_df1, new_df2 = list(map(lambda df: df.assign(A=df['A'].apply(float)), [df1, df2]))

这样会得到两个全新的DataFrame,它们的A列已经转成浮点型,原df1和df2会保持原样。

你之前的map用法为啥不对?

你写的map(lambda x: x.query(float(x)), [df1, df2])有两个明显问题:

  • query方法是用来执行类SQL查询语句的,根本不是用来修改列数据的工具,这里完全用错了;
  • map返回的是迭代器对象,必须通过list()或者遍历它才会触发里面的lambda函数执行,否则什么实际操作都不会发生。

测试验证示例

用你提供的测试数据来实操一遍(先确保A列是字符串类型):

import pandas as pd

# 创建测试数据(A列为字符串格式)
df1 = pd.DataFrame({'A': ['1', '2', '1', '1.5'], 'B': [1, 0, 2, 1], 'C': [2, 0, 2, 3]})
df2 = pd.DataFrame({'A': ['3', '4', '2.7', '3.1'], 'B': [1, 5, 2, 4]})

# 一行代码完成类型转换
[df['A'] = df['A'].apply(lambda x: float(x)) for df in [df1, df2]]

# 验证转换结果
print(df1['A'].dtype)  # 输出 float64
print(df2['A'].dtype)  # 输出 float64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:15:31