Pandas无法将新DataFrame追加至CSV文件问题求助
问题修复方案
你的代码存在两个核心问题导致CSV未更新且数据错位,下面是具体修复方案:
错误原因
- DataFrame创建方式错误:你用
pd.DataFrame([fake.name(), attackValue, defenceValue, consumptionValue])创建士兵数据时,这个单列表会被解析成4行1列的DataFrame,和原CSV的4列结构不匹配,concat后新数据就跑到了额外的列里,导致错位。 - 未将合并结果写入文件:
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
相关产品推荐
相关产品推荐

