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

Python while循环未向DataFrame追加值导致导出CSV内容缺失

问题原因
  • 核心原因是pandas的DataFrame.append()方法不是原地操作:调用该方法后不会修改原有maxlevel对象,只会返回拼接完成的新DataFrame。你的代码中没有将返回的新对象重新赋值给maxlevel,所以循环内的所有追加操作都没有生效,maxlevel始终保留初始赋值的内容。
  • 额外说明:append()方法在pandas 2.0及以上版本已经被正式弃用,即使补全赋值逻辑也会触发版本告警,更推荐使用pd.concat()实现DataFrame拼接。
修复后的代码
import pandas as pd

df = pd.read_csv('C:/Users/ymx19/Desktop/EHS/Location/results/Batch3_enterprise_with_missing_level/HOU.csv',header = 0)
df = df.dropna(axis ='columns',how ='all')
headers_list = [x for x in df.columns]
count = len(headers_list)
k = headers_list[-1]
maxlevel = df[df[k].notna()].drop_duplicates(subset= headers_list, keep="last")
while count > 3:
    m = headers_list[-1]
    headers_list.pop()
    z = headers_list[-1]
    lower_level = df.drop_duplicates(subset=headers_list, keep="last")
    lower_level = lower_level[lower_level[z].notna() & lower_level[m].isna()]
    # 替换原有append逻辑,用concat拼接后重新赋值给maxlevel
    maxlevel = pd.concat([maxlevel, lower_level], ignore_index=True)
    count -= 1 
maxlevel.to_csv('C:\\Users\\ymx19\\Desktop/EHS\\Location\\results\\test\\HOU.csv', index = False)
改动说明
  • 把原来的maxlevel.append(lower_level)替换为maxlevel = pd.concat([maxlevel, lower_level], ignore_index=True),既解决了赋值问题,也兼容新版pandas的语法要求
  • 新增的ignore_index=True参数会重置拼接后DataFrame的行索引,避免出现重复索引的问题,如果需要保留原有索引可以删除该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:54:04