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

如何拆分Pandas DataFrame的ranks列以生成新url列?

解决Pandas DataFrame中嵌套列表字典列的拆分问题

你之前尝试用字符串拆分处理ranks列没成功,核心原因是这个列里存的不是字符串,而是包含单个字典的Python列表对象(dtype('O')也能佐证这一点),所以字符串拆分的思路完全不对。咱们换个方式直接处理嵌套的字典结构就行:

具体实现步骤与代码

  1. 提取列表中的字典:每个ranks元素都是长度为1的列表,用.str[0]就能直接取出里面的字典
  2. 把字典转成独立列:用apply(pd.Series)可以把字典的键自动转为列名,对应的值填充到各行
  3. 合并回原DataFrame,再调整列名和顺序

完整代码如下:

import pandas as pd

# 基于你的原始DataFrame操作
# 第一步:提取列表里的字典并转为DataFrame
rank_url_df = df['ranks'].str[0].apply(pd.Series)

# 第二步:合并到原DataFrame,并重命名列匹配需求
df = pd.concat([df, rank_url_df], axis=1)
# 替换原ranks列,或者直接覆盖(这里用rename后删除原列更清晰)
df = df.rename(columns={'rank': 'ranks'})
df = df.drop(columns=['ranks'])  # 删除原来存列表的ranks列

# 第三步:调整列顺序到你想要的格式
df = df[['Keyword', 'ranks', 'url', 'search_type', 'search_volume']]

为什么你之前的方法无效?

  • 用str.split()是把列内容当成字符串处理,但ranks里是列表对象,自然会返回NaN
  • 尝试pd.DataFrame(df.ranks.str.split(' ',1).tolist())时,拆分后的结果形状和你预设的列数不匹配,所以抛出ValueError

最终效果

运行代码后,你的DataFrame会完全符合预期:

Keywordranksurlsearch_typesearch_volume
kw11example.com1500
kw11example.com2500
kw22example.com11500
kw22example.com21500
kw31example.com160
kw31example.com260

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:45