如何使用pandas向CSV文件的两列末尾追加行数据?
报错原因
你提供的代码存在两处问题:
- 缺少
datetime模块的导入,直接运行会触发未定义的报错 - 核心逻辑错误:每次调用函数时会读取CSV中已有的全部数据生成DataFrame,此时DataFrame的行数等于文件中已有的数据行数,你直接对整列
df['Date']、df['Price']赋值长度为1的列表,当文件中已有数据行数≠1时就会出现长度不匹配的报错。前两次能运行成功纯属巧合:初始CSV只有表头时读入的DataFrame是空的,赋值长度1的列表会生成1行数据;第二次调用时读入的DataFrame刚好是1行,和赋值的列表长度匹配。
解决方案
方案1:直接构造单行数据追加(效率最高,无需读取全表)
不需要引入pandas,直接用Python内置的csv模块操作即可,代码更轻量,兼容初始CSV不存在的场景:
import csv import os import datetime from random import randint def date_to_csv(): file_path = 'test.csv' new_row = [datetime.date.today(), randint(1,100)] # 判断文件是否存在,不存在则首次写入需要加表头 file_exists = os.path.exists(file_path) with open(file_path, 'a', newline='', encoding='utf-8') as f: writer = csv.writer(f) if not file_exists: writer.writerow(['Date', 'Price']) writer.writerow(new_row)
方案2:用pandas构造单行DataFrame追加
如果一定要用pandas实现,不要读取全表替换列,直接生成新的单行数据再追加:
import pandas as pd import os import datetime from random import randint def date_to_csv(): file_path = 'test.csv' # 构造仅含待追加数据的单行DataFrame new_df = pd.DataFrame({ 'Date': [datetime.date.today()], 'Price': [randint(1,100)] }) # 文件不存在时需要写表头,已存在则跳过表头 need_header = not os.path.exists(file_path) new_df.to_csv(file_path, mode='a', index=False, header=need_header)
内容的提问来源于stack exchange,提问作者buckenup
相关产品推荐
相关产品推荐

