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

如何将DataFrame中列表类型列拆分为同名列的多行数据?

解决DataFrame列表列转多行并去重的问题

问题场景

原始DataFrame如下:

date             bumpSizes
12/9/23            ['-0.2','-0.4','0.8']
12/9/23             ['-0.2', '-0.3']

需求是将bumpSizes列的列表元素转为同一列的多行数据,同时保留唯一值,目标结果如下:

index           bumpSizes
12/9/23           -0.2
12/9/23           -0.4
12/9/23            0.8
12/9/23           -0.3

你尝试过以下两种方法但未达到预期:

  1. 该方法将数据拆分为多列而非多行:
df["bumpSizes"]=df["bumpSizes"].str.replace("'","").str.replace ("[","").str.replace ("]","").str.split(",", expand=True)
  1. 此方法也未实现需求:
df.assign("bump_new",df.bumpSizes)

解决方案

核心思路

先将字符串格式的列表转为真实的Python列表,再用explode方法展开为多行,最后去重得到目标结果。

分步实现

  1. 字符串转真实列表
    原始bumpSizes列的内容是字符串形式的列表,需用ast.literal_eval转换为可操作的列表:
import ast
df["bumpSizes"] = df["bumpSizes"].apply(ast.literal_eval)
  1. 列表列展开为多行
    使用pandas的explode方法,将每个列表元素拆分为单独行,保留对应date值:
df_exploded = df.explode("bumpSizes")
  1. 去重整理
    对展开后的DataFrame去重,得到最终结果:
df_result = df_exploded.drop_duplicates().reset_index(drop=True)

完整代码

import pandas as pd
import ast

# 构造原始DataFrame
df = pd.DataFrame({
    "date": ["12/9/23", "12/9/23"],
    "bumpSizes": ["['-0.2','-0.4','0.8']", "['-0.2', '-0.3']"]
})

# 字符串转列表
df["bumpSizes"] = df["bumpSizes"].apply(ast.literal_eval)
# 展开为多行
df_exploded = df.explode("bumpSizes")
# 去重
df_result = df_exploded.drop_duplicates().reset_index(drop=True)

print(df_result)

运行后输出:

date bumpSizes
0  12/9/23      -0.2
1  12/9/23      -0.4
2  12/9/23       0.8
3  12/9/23      -0.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:19