You need to enable JavaScript to run this app. Python pandas for循环生成CREATIVE_SIZE列出现大量NAN值排查
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas for循环生成CREATIVE_SIZE列出现大量NAN值排查

Pandas生成匹配尺寸列出现NaN的排查与修复

核心问题成因

  • 代码逻辑上creative_size列表所有分支(含else兜底)均返回字符串,列表内不可能存在空值,出现NaN90%以上概率是索引对齐问题
  • 原始df如果经过过滤、拼接、去重等操作,索引不是从0开始的连续整数(比如索引为[0,1,3,4,6]),此时创建pd.Series(creative_size)时,默认生成的索引是[0,1,2,3,4,...,n-1]
  • 执行df.insert()时,Pandas会按索引值对齐而非按行位置对齐,sizes中未被原始df索引匹配到的行,就会被自动填充为NaN
  • 次要可能原因:循环处理CREATIVE_NAME列中的NaN值时触发类型错误,异常被静默吞掉,导致creative_size列表长度小于df行数,对齐时同样会出现NaN

排查步骤

  • 验证df索引连续性:运行list(df.index) == list(range(len(df))),若返回False则确认是索引对齐问题
  • 验证列表长度匹配:运行len(creative_size) == len(df),若返回False说明循环过程存在漏append的情况
  • 验证原始列类型:运行df['CREATIVE_NAME'].isna().sum(),确认是否存在未处理的缺失值

修复方案

方案1:最小改动(适配现有循环逻辑)

在创建Series时指定和原df完全一致的索引,强制按行匹配:

# 替换原来的sizes = pd.Series(creative_size)
sizes = pd.Series(creative_size, index=df.index)

额外说明:也可以在循环前执行df = df.reset_index(drop=True)将索引重置为连续整数,匹配默认的Series索引,但该操作会修改原df索引,优先推荐指定index=df.index的方案。

方案2:优化为向量化实现(更高效率,无对齐问题)

替换原有循环逻辑,使用Pandas内置方法实现,避免循环和索引问题:

import numpy as np

# 预定义匹配规则
size_list = [
    '320x480', '728x1024', '320x50', '728x90',
    '300x250', '80x80', '1200x627', '768x1024',
    '320x420', '768x820'
]

# 统一转为字符串避免NaN类型报错,生成匹配条件
name_str = df['CREATIVE_NAME'].astype(str)
conditions = [name_str.str.contains(size, regex=False) for size in size_list]

# 插入新列
df.insert(
    loc=0,
    column='creative_size',
    value=np.select(conditions, size_list, default='no creative size')
)

向量化实现比循环速度快10~100倍,尤其适配大尺寸数据集,且所有行都会被default分支兜底,不会出现NaN。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 06:06:05