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

如何在完整Pandas DataFrame上应用def定义的自定义函数

问题1 函数运行异常,加值超过100的解决方案

错误原因

  • df.apply(fun)默认按列遍历DataFrame,每传入一列就会执行一次fun函数
  • fun函数内部循环遍历了所有列执行加100逻辑,示例DataFrame有2列,就会触发2次全表加100操作,导致符合条件的值累计加了200
  • 该逻辑本身不需要用apply实现,直接封装循环逻辑即可,同时要避免函数内部操作全局变量

修正后代码

import pandas as pd
import numpy as np

# 示例数据构造
raw_data = {'age1': [23,45,21],'age2': [10,20,50]}
df = pd.DataFrame(raw_data, columns = ['age1','age2'])

def fun(df):
    l = list(df.columns)
    for c in l:
        df[c] = np.where(df[c]>45, df[c]+100, df[c])
    return df

df = fun(df)
问题2 函数无法应用到整个DataFrame的解决方案

错误原因

  • 你指定了axis=1,此时apply每次传入的参数x是一整行的Series对象,直接对Series执行x>=40返回的是布尔序列,无法被if语句识别(if只能接收单个布尔值)
  • 要作用到DataFrame的每一个元素,需要用applymap(pandas 2.0+也可以用df.map)替换apply

修正后代码

方案1 适配逐元素处理

def f(x):
    if x>=40:
        val = x+100
    else:
        val = x
    return val

# 用applymap逐元素调用函数
df = df.applymap(f)

方案2 向量化实现(性能更高,适合大数据量)

无需自定义函数,直接用pandas向量化操作:

df = df.where(df < 40, df + 100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 07:27:03