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

如何用Python处理含千条记录的CSV文件并绘制图表?

完成CSV数据读取与图表绘制的Python解决方案

嘿,你已经有了一个不错的起步代码,但还有几个关键地方需要完善才能顺利画出清晰的图表,尤其是处理上千条记录的场景。我帮你把代码补全并做了优化,来看看吧:

修正并优化后的完整代码

from matplotlib import style
from matplotlib import pylab as plt
import numpy as np
import csv
import datetime

# 设置绘图风格,ggplot风格看起来更清爽
style.use('ggplot')
filename = 'results.csv'

# 初始化存储数据的列表
values = []
dates = []

# 读取CSV文件,处理上千条记录也没问题
with open(filename, 'r') as csvfile:
    csvreader = csv.reader(csvfile)
    # 如果你的CSV文件有表头,记得打开下面这行注释跳过表头
    # next(csvreader)
    for row in csvreader:
        # 确保每行有两个有效字段
        if len(row) == 2:
            try:
                # 把数值转成float类型——这很重要,不然字符串没法绘图
                values.append(float(row[0]))
                # 按照指定格式解析日期字符串
                dates.append(datetime.datetime.strptime(row[1], '%a %b %d'))
            except ValueError as e:
                # 遇到格式错误的行直接跳过,避免程序崩溃
                print(f"跳过无效数据行: {row}, 原因: {e}")

# 转成numpy数组,处理大数据时效率更高
values = np.array(values)
dates = np.array(dates)

# 创建一个合适大小的画布,避免大量数据挤在一起
plt.figure(figsize=(12, 6))

# 绘制折线图,调整标记和线条样式适配大量数据
plt.plot(dates, values, marker='o', markersize=3, linestyle='-', linewidth=1, label='数值趋势')

# 设置图表的标签和标题,让图表更易读
plt.xlabel('日期', fontsize=12)
plt.ylabel('数值', fontsize=12)
plt.title('CSV数据趋势图', fontsize=14)

# 旋转x轴的日期标签,防止大量日期重叠看不清
plt.xticks(rotation=45)

# 添加图例
plt.legend()

# 自动调整布局,避免标签被截断
plt.tight_layout()

# 显示图表
plt.show()

# 如果需要保存高清图表,解开下面的注释
# plt.savefig('data_trend.png', dpi=300)

关键优化点说明

  • 异常处理:处理上千条数据时难免会有格式错误的行,加个try-except可以让程序不崩溃,还能提示错误位置
  • 数据类型转换:把value转成float是核心——原来的代码里存的是字符串,根本没法用来绘图
  • 图表适配:设置合适的画布大小、旋转日期标签,避免大量数据导致图表拥挤
  • 可读性优化:添加标题、坐标轴标签和图例,让图表信息更清晰

备选高效方案(适合大数据量)

如果你的CSV真的有上千条记录,用pandas会比原生csv模块更高效,代码也更简洁:

import pandas as pd
from matplotlib import style
import matplotlib.pyplot as plt

style.use('ggplot')

# 直接读取CSV,自动处理数据类型
df = pd.read_csv('results.csv', names=['value', 'date'], header=None)
# 快速解析日期
df['date'] = pd.to_datetime(df['date'], format='%a %b %d')
# 一键绘图
df.plot(x='date', y='value', figsize=(12,6), marker='o', markersize=3, linewidth=1)
plt.xlabel('日期')
plt.ylabel('数值')
plt.title('CSV数据趋势图')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

pandas内部做了很多优化,处理大数据的速度会快不少,而且代码量少很多,推荐试试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:46:26