如何使用Pandas在CSV文件中筛选特定日期范围并绘制图表?
嘿,作为Python新手处理CSV和可视化确实得注意几个细节,我来帮你搞定日期筛选和绘图的问题~
首先看你现有代码的小问题:你读取CSV的时候只选了Close列,没包含日期列,这就没法筛选日期,而且x轴的日期也会出问题。咱们一步步来修正:
1. 正确读取CSV并处理日期
首先得确保把日期列读进来,并且让Pandas识别成日期类型。假设你的CSV里日期列叫Date,修改读取代码:
import pandas as pd import matplotlib.pyplot as plt # 读取文件,指定日期列,把它设为索引(方便后续筛选) prc = pd.read_csv( "your_file.csv", # 这里替换成你的实际文件名 parse_dates=["Date"], # 告诉Pandas哪一列是日期 index_col="Date", # 将日期设为DataFrame的索引 nrows=150, usecols=["Date", "Close"] # 必须包含日期列和收盘价列 )
如果你的日期列名字不是Date,记得改成CSV里实际的列名哦~
2. 筛选指定日期范围
因为我们把日期设成了索引,直接用切片就能轻松筛选:
# 定义你要的日期范围 start_date = "2013-03-20" end_date = "2014-03-04" # 筛选出这个范围内的数据 filtered_prc = prc.loc[start_date:end_date]
如果没把日期设为索引,也可以用布尔索引:
filtered_prc = prc[(prc["Date"] >= start_date) & (prc["Date"] <= end_date)]
3. 计算移动平均并绘图
基于筛选后的数据计算移动平均,然后绘图,还要优化一下图表的可读性:
# 计算5日移动平均 prc_ma = filtered_prc["Close"].rolling(5).mean() # 绘制图表 plt.figure(figsize=(10, 6)) # 设置图表大小,看着更舒服 plt.plot(filtered_prc["Close"], color="blue", label="Price") plt.plot(prc_ma, color="red", label="5-Day Moving Average") plt.xlabel("Date") plt.ylabel("Price") plt.title("Price & 5-Day Moving Average (2013-03-20 to 2014-03-04)") plt.legend() # 显示图例 plt.xticks(rotation=45) # 旋转日期标签,避免挤在一起 plt.tight_layout() # 自动调整布局,防止标签被截断 plt.show()
小提示
如果Pandas识别不了你的日期格式,可以用date_parser参数自定义解析函数,比如:
from datetime import datetime prc = pd.read_csv( "your_file.csv", parse_dates=["Date"], date_parser=lambda x: datetime.strptime(x, "%Y/%m/%d"), # 替换成你的日期格式 index_col="Date", usecols=["Date", "Close"] )
内容的提问来源于stack exchange,提问作者Hun3u5ek
相关产品推荐
相关产品推荐

