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

基于DataFrame列值创建新列时apply函数结果异常的问题

问题排查与解决方法

可能的原因

  • 数据类型不匹配:你的周数列可能是字符串类型(比如'30'),但判断逻辑用的是数字30,导致匹配失败,所有值都走else分支返回Osogbo。
  • 列表定义错误:如果你的匹配列表不是[30]而是写错了数字(比如31),或者包含无关值,也会导致30无法被匹配到。
  • apply调用问题:可能没正确指定处理的列,或者函数参数传递出错。

解决方法

方法1:修正数据类型后用apply

先统一周数列的类型,再用正确的判断逻辑:

# 转换周数列数据类型为整数(如果原类型是字符串)
df['年度周数'] = df['年度周数'].astype(int)

# 定义判断函数
def get_strike_location(week):
    if week == 30:
        return 'Ilorin'
    elif week == 32:
        return 'Osogbo'
    else:
        # 其他周数可返回空值或自定义标记,按需调整
        return None

# 生成新列
df['罢工地点'] = df['年度周数'].apply(get_strike_location)

方法2:用numpy.where矢量化操作(推荐)

不用apply,直接用矢量化运算,速度更快:

import numpy as np

# 先确保周数列是整数类型
df['年度周数'] = df['年度周数'].astype(int)

df['罢工地点'] = np.where(df['年度周数'] == 30, 'Ilorin', 
                        np.where(df['年度周数'] == 32, 'Osogbo', None))

方法3:用字典映射

创建周数与地点的映射关系,直接匹配:

location_map = {30: 'Ilorin', 32: 'Osogbo'}
# 转换类型后映射,其他周数返回NaN
df['罢工地点'] = df['年度周数'].astype(int).map(location_map)

关键排查步骤

先运行以下代码确认周数列的实际内容和类型:

print(df['年度周数'].unique())
print(df['年度周数'].dtype)

如果输出里出现'30'(带引号的字符串),说明是类型不匹配导致的问题,转成int即可解决。

内容的提问来源于stack exchange,提问作者Amos Moses Omofaiye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:40:27