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

Pandas DataFrame高效生成无NaN标签列的处理方法

高效批量处理Pandas标签列生成需求方案

针对3万行规模的数据集,以下两种方案性能优异,可按需选择:


方案1:一步生成无NaN的tags列(最高效,推荐)

不需要先生成带NaN的列表再过滤,直接利用Pandas向量化操作完成,3万行数据可毫秒级处理完成,同时规避了误判字符串'nan'的问题:

import pandas as pd
import numpy as np

# 你的示例数据
df = pd.DataFrame(data = {
    'text': ['Quinbrook acquires planned 350 MW project', 'Australian rooftop solar to shine bright', 'The US installed 5.7 GW of solar in Q2'],
    'acquisition': ['acquisition', np.nan, np.nan], 
    'tender': [np.nan, np.nan, np.nan], 
    'opinion': [np.nan, 'opinion', np.nan]
})
# 获取标签列名
tags = list(df.columns)
tags.remove('text')

# 一步生成无NaN的tags列:stack自动丢弃NaN,按行索引聚合为列表
df['tags'] = df[tags].stack().groupby(level=0).agg(list)
# 兼容全NaN行:如果某行所有标签都是NaN,补为空列表
df['tags'] = df['tags'].fillna('').apply(list)

执行后df['tags']输出结果:

0    [acquisition]
1        [opinion]
2               []
Name: tags, dtype: object

方案2:已生成带NaN的tags列,批量过滤

如果已经按现有代码生成了带NaN的tags列,可以用整列列表推导式批量处理,性能远高于逐行apply:

# 你已有的生成带NaN的tags列代码
df['tags'] = df[tags].values.tolist() 

# 批量过滤所有列表中的NaN
df['tags'] = [[x for x in lst if pd.notna(x)] for lst in df['tags']]

注意不要用str(x) != 'nan'的判断方式,若标签中本身存在字符串'nan'会被误删,用pd.notna()是更规范的NaN判断方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:36:03