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

Python使用for循环合并Pandas DataFrame时出现数据丢失问题如何修复

问题原因

你的代码出错核心是循环内的合并逻辑错误:每次迭代都仅将初始的df1和当前生成的df2做合并,直接覆盖df变量,之前迭代得到的合并结果完全没有被留存,最终df仅会包含data1第一行、最后一行展开的内容,中间所有行的信息全部丢失。

修复方案

更推荐第一种写法,性能更高:

方案1:先收集所有子DataFrame再统一合并

循环中反复调用pd.concat会生成大量中间对象,性能较差,先把所有子DataFrame存入列表,最后合并一次的写法效率更高,尤其适合data1行数较多的场景:

import pandas as pd
start_date = '2020-12-13'

# 初始化空列表存储所有展开后的子DataFrame
df_list = []
for i in range(len(data1)):
    tmp_df = pd.DataFrame({
        'id': data1.id[i],
        'Statut': data1.statut[i],
        'Date send': data1.date_send[i],
        'Day': pd.date_range(start_date, periods=len(data1.binairy[i]), freq='D'),
        'Code': list(data1.binairy[i]),
        'Commentaire ': data1.commentaire[i]
    })
    df_list.append(tmp_df)

# 一次性合并所有子DataFrame
df = pd.concat(df_list, ignore_index=True)
df

方案2:沿用原有写法调整合并逻辑

如果要保留你原来的代码结构,只需把初始df1赋值给df,每次循环都将已有的df和新生成的df2合并即可:

import pandas as pd
start_date = '2020-12-13'

# 初始化df为第一行data1展开的结果
df = pd.DataFrame({
    'id':data1.id[0],
    'Statut':data1.statut[0],
    'Date send': data1.date_send[0],
    'Day': pd.date_range(start_date, periods=len(data1.binairy[0]), freq='D'),
    'Code': list(data1.binairy[0]),
    'Commentaire ':data1.commentaire[0]
})

for i in range(1, len(data1)):
    df2 = pd.DataFrame({
        'id':data1.id[i],
        'Statut':data1.statut[i],
        'Date send': data1.date_send[i],
        'Day': pd.date_range(start_date, periods=len(data1.binairy[i]), freq='D'),
        'Code': list(data1.binairy[i]),
        'Commentaire ':data1.commentaire[i]
    })
    # 合并当前已有的全部数据和新生成的df2
    df = pd.concat([df, df2], ignore_index=True)

df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:07