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

Pandas无法将新DataFrame追加至CSV文件问题求助

问题修复方案

你的代码存在两个核心问题导致CSV未更新且数据错位,下面是具体修复方案:

错误原因

  1. DataFrame创建方式错误:你用pd.DataFrame([fake.name(), attackValue, defenceValue, consumptionValue])创建士兵数据时,这个单列表会被解析成4行1列的DataFrame,和原CSV的4列结构不匹配,concat后新数据就跑到了额外的列里,导致错位。
  2. 未将合并结果写入文件:pd.concat只是返回合并后的DataFrame,但你没有把这个结果存回CSV,所以文件完全没变化。另外循环里反复读取CSV也很低效。

修正后的完整代码

import pandas as pd 
from faker import Faker
import random
import csv  # 初始化文件需要用到

fake = Faker()

# 初始化CSV文件(仅首次运行需要,后续可注释或调整)
with open('recources2.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["Name", "Attack", "Defence", "Consumption"])
    writer.writerow([fake.name(), 20, 12, 7])
    # with语句会自动关闭文件,不用手动调用file.close()

def soldierGeneration(x):
    # 一次性读取原CSV,避免循环内重复读文件
    df = pd.read_csv('recources2.csv')
    # 批量生成新士兵数据
    new_data = []
    for _ in range(x):
        attack = random.randint(0,21)
        defence = random.randint(0,21)
        consumption = random.randint(0,11)
        # 每个士兵是一个列表,对应4列
        new_data.append([fake.name(), attack, defence, consumption])
    
    # 把新数据转成和原CSV同结构的DataFrame
    new_df = pd.DataFrame(new_data, columns=["Name", "Attack", "Defence", "Consumption"])
    # 合并原数据和新数据
    combined_df = pd.concat([df, new_df], ignore_index=True)
    # 写入CSV,index=False避免生成额外索引列
    combined_df.to_csv('recources2.csv', index=False)

soldierGeneration(4)

关键改动说明

  • 正确构造DataFrame:用列表嵌套的方式存储多条数据,创建时指定列名,保证和原CSV结构一致,解决错位问题。
  • 优化IO操作:循环外一次性读取文件,批量生成数据后再合并写入,减少文件读写次数,提升效率。
  • 写入时去除索引:to_csv加index=False,避免写入不必要的索引列污染CSV内容。
  • 移除冗余代码:删掉未用到的numpy导入,去掉手动关闭文件的代码。

执行这段代码后,你的CSV文件会正确新增4条士兵记录,格式完全匹配原表头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:27:43