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

如何将循环生成的多个字典合并为单个Pandas DataFrame

解决方法

核心逻辑是先收集所有单条数据字典到同一个列表中,再一次性转换为DataFrame,避免循环中每次生成独立小表。

注意:不要使用dict作为变量名,这是Python内置类型的关键字,会覆盖原生字典功能引发后续报错。

修改后的完整代码如下:

import pandas as pd
import urllib.parse
from bs4 import BeautifulSoup

# 循环外先初始化空列表存储所有行数据
data_list = []

for l in soup.find_all('a'):
    link = l.get('href')
    if link.count('2021') == 1:
        stuff = urllib.parse.urlsplit(link)
        stuff = stuff.path.split('/')
        if stuff[1] == '2021':
            # 无需转numpy数组,split返回的本身就是列表,可直接按索引取值
            year = stuff[1]
            month = stuff[2]
            day = stuff[3]
            category = stuff[4]
            # 如果需要把关键词列表合并为字符串可以用join,不需要则直接保留stuff[5:7]
            keywords = '/'.join(stuff[5:7])
            row_dict = {'year': year, 'month': month, 'day': day, 'category': category, 'keywords': keywords}
            data_list.append(row_dict)

# 循环结束后一次性生成完整DataFrame
full_df = pd.DataFrame(data_list)

# 你当前输出有大量重复行,需要去重可以打开下面注释
# full_df = full_df.drop_duplicates().reset_index(drop=True)

# 输出查看结果
print(full_df)

额外说明:

  • 该方法比循环中逐次生成小DataFrame再拼接的性能高很多,数据量越大优势越明显
  • 去掉了原代码中冗余的list(stuff)、np.array(stuff)操作,运行效率更高
  • 如果需要保留keywords为列表格式,删除'/'.join()包裹直接赋值keywords = stuff[5:7]即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:18:03