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

如何通过循环逐行填充无列无行的空pandas DataFrame?

错误原因

你当前的写法直接对空DataFrame的列赋值,既没有对应行索引承接数据,每次循环还会直接覆盖整列的所有值,自然无法逐行添加爬取到的字段。

最优解决方法

推荐先把每条数据暂存到字典列表中,全部爬取完成后一次性转为DataFrame,这种方式性能远高于循环中反复修改DataFrame,几百条数据的场景下执行效率优势很明显。

import pandas as pd
import requests

cids = [4100,4101,4102,4103,4104]
# 先定义空列表存每条数据
data_list = []

for i in cids:
    # 加超时设置避免无限等待
    url_info = requests.get(f'myurl/{i}/profile', timeout=10)
    jdata = url_info.json()
    # 把当前页面提取的字段拼成字典追加到列表
    data_list.append({
        'Customer_id': i,
        'Name': jdata['user']['profile']['Name'],
        # 其他要提取的字段直接在此处添加即可
        # 'Age': jdata['user']['profile'].get('Age', '')
    })

# 全部爬取完成后一次性转DataFrame
df = pd.DataFrame(data_list)

如果担心中途爬取失败丢失数据,也可以采用边爬边拼接的写法,缺点是性能略低于上述方案:

import pandas as pd
import requests

cids = [4100,4101,4102,4103,4104]
df = pd.DataFrame()

for i in cids:
    url_info = requests.get(f'myurl/{i}/profile', timeout=10)
    jdata = url_info.json()
    # 生成单行DataFrame
    row_df = pd.DataFrame([{
        'Customer_id': i,
        'Name': jdata['user']['profile']['Name'],
        # 其他要提取的字段
    }])
    # 拼接新行并重置索引
    df = pd.concat([df, row_df], ignore_index=True)

优化提示

给JSON字段提取加get方法,比如jdata['user']['profile'].get('Name', ''),遇到某个字段缺失时不会直接报错,会返回你设置的默认空值,大幅提升爬虫稳定性。

内容的提问来源于stack exchange,提问作者V.Nouri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:24:03