python 从CSV文件中读取数据并画日期折线图
代码环境:python 3.7 + PyCharm 2019.1.1
问题描述:
用pandas.read_csv读取文件中的数据后,希望以第一列(时间)为横轴,以第五列(数字数据)为纵轴画出日期折线图。画图工具包使用matplotlib
遇到的问题及解决方法:
-
数据转换
DataFrame类型的数据不能直接作为matplotlib.pyplot.plot数据的参数,需要使用df.values转化
此外,本例中画图只需要日期数据,故使用time.strptime(string, format).date()函数提取数据中的日期部分。
用法说明:
函数作用:根据指定的格式把一个时间字符串解析为时间元组 参数: string -- 时间字符串。 format -- 格式化字符串。 返回值:struct_time对象 子函数:date()保留日期部分 time()保留时间部分 补充:python中的日期时间格式化符号 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00-59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为 0,星期一为 1,以此类推。 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
-
画图
plt.plot画图
完整代码:
import matplotlib.pyplot as plt
from datetime import datetime
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
plt.rcParams['axes.unicode_minus'] = False
def data_draw(data):
# 画图函数
time = [datetime.strptime(d, '%Y/%m/%d %H:%M').date() for d in data.values[:, 0]] # X轴数据
plt.figure(1)
plt.subplot(1, 1, 1)
plt.plot(time, data.values[:, 4], 'ro-', color='r', alpha=0.8, linewidth=1) # 数据的第五列作为Y轴数据
plt.xlabel('日期')
plt.ylabel('人数')
plt.gcf().autofmt_xdate() # 自动旋转日期标记
plt.show()
if __name__ == '__main__':
dataNews = pd.read_csv(datapath, encoding="utf_8_sig")
data_draw(dataNews)
具体的函数参数就不写了