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

向Pandas DataFrame追加新行出现异常索引列问题求助

问题:追加数据到CSV时重复生成索引列,导致数据逐步右移

每次运行模型计算后,将输出变量作为新行追加到云服务器上的归档CSV文件,但每次追加都会生成新的索引列,旧数据逐渐被挤到右侧。尝试过set_index、reset_index方法仍未解决。

关键信息

  • model_output:待追加的新行变量列表
  • df_old:存储在云服务器的归档CSV文件

原尝试代码

# append results to model output
model_output = [[date_today, bh_level_today, bh_change_today, PminusET_today, model, movement, proj_date_end,proj_depth_end]]
                    
df_newrow = pd.DataFrame(model_output, columns=['date', 'height', 'rate', 'P_ET', 'model', 'statement', 'model_date','model_height'])
                    
# read model_output archive file and append new line
df_old = pd.read_csv("ftp://............../wwwhome/FEM_model_output/model_output.csv")
df_old.set_index('date')

df_new = pd.concat([df_old, df_newrow], ignore_index=True, axis=0)
df_new.set_index('date')
df_new.reset_index(inplace=True, drop=True)

# resave file
buffer = io.StringIO()
df_new.to_csv(buffer)
text = buffer.getvalue()
bio = io.BytesIO(str.encode(text))

ftp.storbinary('STOR %s' % os.path.basename("model_output.csv"), bio)

print('data uploaded')
ftp.quit()

解决方案

问题根源是保存CSV时默认写入了DataFrame的索引列,且读取时未正确处理索引,导致每次追加都新增一列。修改如下:

修改后的代码

# 生成待追加的新行数据
model_output = [[date_today, bh_level_today, bh_change_today, PminusET_today, model, movement, proj_date_end,proj_depth_end]]
df_newrow = pd.DataFrame(model_output, columns=['date', 'height', 'rate', 'P_ET', 'model', 'statement', 'model_date','model_height'])

# 读取归档文件时,直接指定date列为索引,避免将旧索引识别为数据列
df_old = pd.read_csv("ftp://............../wwwhome/FEM_model_output/model_output.csv", index_col='date')

# 拼接新旧数据,重置索引
df_new = pd.concat([df_old, df_newrow], ignore_index=True, axis=0)

# 保存CSV时禁止写入索引列(核心修复)
buffer = io.StringIO()
df_new.to_csv(buffer, index=False)
text = buffer.getvalue()
bio = io.BytesIO(str.encode(text))

ftp.storbinary('STOR %s' % os.path.basename("model_output.csv"), bio)
print('data uploaded')
ftp.quit()

关键修复点

  1. 读取时指定索引列:用pd.read_csv(..., index_col='date')直接将date列设为DataFrame索引,避免把之前写入的索引列当成普通数据列。
  2. 保存时不写入索引:df.to_csv(..., index=False)是核心,禁止把DataFrame的索引写入CSV文件,从根源杜绝多余索引列的生成。
  3. 修正无效操作:原代码中df_old.set_index('date')未赋值给变量,实际不会修改原DataFrame,改用read_csv的index_col更高效直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:18:37