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

Pandas DataFrame应用自定义函数仅调用最后一行数据问题排查

问题分析与解决

你遇到的问题是用apply计算新变量时所有行结果完全相同,本质是函数调用和参数传递的错误,具体原因和修正方法如下:

错误原因

  • 在lambda x: new_vars(data)里,你把整个原始DataFrame data传给了new_vars,而非当前迭代的单行数据x
  • new_vars函数里直接取dataframe.Temp和dataframe.Dewpt_Temp,这会返回整列的Series而非单行的单个值,最终计算出的是整列的运算结果,apply逐行返回时就重复了同一组值

修正方案(适配后续复杂行逻辑练习)

调整apply的参数传递,同时修改new_vars函数处理单行数据:

import pandas as pd

data = pd.read_csv('file path/weather_data.csv')

def new_vars(row):
    # 从单行数据中提取单个温度、露点温度值
    temp = row['Temp']
    dewpt = row['Dewpt_Temp']
    
    e = 6.11 * (10 ** ((7.5 * dewpt) / (273.3 + dewpt)))
    e_s = 6.11 * (10 ** ((7.5 * temp) / (273.3 + temp)))
    rh = (e / e_s) * 100
    
    # 返回Series,方便apply后直接转为DataFrame的列
    return pd.Series([e, e_s, rh], index=['e', 'e_s', 'rh'])

# 按行迭代处理数据
new_df = data.apply(lambda x: new_vars(x), axis=1)
# 可选:将新变量合并到原始DataFrame
result_df = pd.concat([data, new_df], axis=1)

更高效的向量化写法(Pandas官方推荐)

如果后续公式支持向量化运算,直接对整列计算会比逐行apply效率高很多,尤其适合大型数据集:

import pandas as pd

data = pd.read_csv('file path/weather_data.csv')

data['e'] = 6.11 * (10 ** ((7.5 * data['Dewpt_Temp']) / (273.3 + data['Dewpt_Temp'])))
data['e_s'] = 6.11 * (10 ** ((7.5 * data['Temp']) / (273.3 + data['Temp'])))
data['rh'] = (data['e'] / data['e_s']) * 100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:05:40