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

如何使用explode展平DataFrame的eperson_id列并完成去重、去空值等数据清洗操作

处理DataFrame中eperson_id列的展平、去重与清理

你现在遇到的问题是要清理DataFrame里的eperson_id列,搞定各种空值、带重复元素的列表,最终得到干净的去重结果。你之前尝试的str.split(',')加explode的方法,没考虑到列表的原始格式、空值过滤和内部去重,所以没达到预期效果。

下面是能满足需求的完整处理方案,我会一步步给你拆解:

import pandas as pd
import numpy as np

# 先还原你的原始DataFrame
data = {
    'eperson_id': [
        None,
        [],
        np.nan,
        [61792146704412477760],
        [8429158820359919752, 87317204426914512343],
        [94049068360051725854, 75755131247948382378, 94049068360051725854],
        [94049068360051725854, 39181670842227113377, 39181670842227113377, 75755131247948382378]
    ]
}
df = pd.DataFrame(data)

# 核心处理步骤
# 1. 先把所有无效值统一转成NaN:包括None、空列表、原生NaN
df['eperson_id'] = df['eperson_id'].apply(lambda x: x if (x is not None and isinstance(x, list) and len(x) > 0) else np.nan)

# 2. 对每个列表内部去重:用集合去重后转回列表
df['eperson_id'] = df['eperson_id'].apply(lambda x: list(set(x)) if isinstance(x, list) else x)

# 3. 展平列表+删除空行:把列表拆成单行单个id,同时去掉所有NaN行
df_exploded = df.explode('eperson_id').dropna()

# 4. 全局去重:确保同一个id只出现一次
df_clean = df_exploded.drop_duplicates().reset_index(drop=True)

# 查看最终结果
print(df_clean)

代码逻辑说明:

  • 步骤1:把所有没用的无效值(空列表、None、NaN)统一转成NaN,这样后续用dropna()就能一次性删掉这些无效行,省得逐个判断。
  • 步骤2:对每个非空列表内部去重,用set()去重是最快捷的方式,转成列表后保持可迭代的格式。
  • 步骤3:explode()会把列表里的每个元素拆成单独一行,再用dropna()彻底清除残留的空值。
  • 步骤4:全局去重,避免不同原始行里的重复id多次出现。

运行后得到的结果就是你想要的干净格式:

eperson_id
0  61792146704412477760
1   8429158820359919752
2  87317204426914512343
3  94049068360051725854
4  75755131247948382378
5  39181670842227113377

如果你想保留原始行的分组(比如把同一行的去重id合并成逗号分隔的字符串),可以用下面的替代逻辑:

# 保留原始行结构,把去重后的列表转成字符串
df_grouped = df.dropna()
df_grouped['eperson_id'] = df_grouped['eperson_id'].apply(lambda x: ', '.join(map(str, list(set(x)))))
df_grouped = df_grouped.drop_duplicates().reset_index(drop=True)

这样得到的结果会保留每行的多个id,再根据你的需求选择是否展平即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:27:38