CSV模块包含在Python标准库中
import csv
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
print(header_row)
模块csv中的函数next():返回文件中的下一行。
for index,column_header in enumerate(header_row):
print(index,column_header)
函数enumerate() : 获取每个元素的索引及其值
因此我们知道了哪种信息在第几列
#从文件中获取最高气温
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
highs = []
for row in reader:
high = int(row[1])
highs.append(high)
print(highs)
(1)、创建一个空列表;
(2)、遍历文件中余下的各行,阅读器对象
从其停留的地方继续往下读取CSV文件,每次都自动返回当前所处位置的下一行。由于已经读取了文件头行,这个循环将从第二行开始;
(3)、使用int()将字符串转换成数字。
#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(highs,c='red')
#设置图形的格式
plt.title("Daily high temperatures, July 2014",fontsize=24)
plt.xlabel('',fontsize=16)
plt.ylabel("Temperature (F)",fontsize=16)
plt.tick_params(axis='both',which='major',labelsize=16)
plt.show()
(1)、函数figure()指定图表的长度、宽度、像素;
(2)、将highs列表传递给plot();
(3)、然后修改图表的相关信息。
>>> from datetime import datetime
>>> first_date = datetime.strptime("2014-7-1",'%Y-%m-%d')
>>> print(first_date)
2014-07-01 00:00:00
(1)、首先导入模块datetime中的datetime类,再调用方法strptime();
(2)、第一个实参为包含所需日期的字符串,第二个实参告诉Python如何设置日期的格式;
’%Y-’ 让Python将字符串中第一个连字符前面的部分视为四位的年份;
’%m-’ 让Python将第二个连字符前面的部分视为表示月份的数字;
’%d’ 让Python将字符串的最后一部分视为月份中的一天。
import csv
import matplotlib.pyplot as plt
from datetime import datetime
#从文件中获取最高气温和气温
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
dates,highs = [], []
for row in reader:
current_date = datetime.strptime(row[0],"%Y-%m-%d")
dates.append(current_date)
high = int(row[1])
highs.append(high)
#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs,c='red')
#设置图形的格式
plt.title("Daily high temperatures, July 2014",fontsize=24)
plt.xlabel('',fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature (F)",fontsize=16)
plt.tick_params(axis='both',which='major',labelsize=16)
plt.show()
(1)、首先创建两个空列表,用于存储从文件中提取的日期和最高气温;
(2)、然后将包含日期信息的数据(row[0])转换为datetime对象,并将其附加到列表dates末尾;
(3)、将日期和最高气温值传递给plot()。
(4)、调用fig.autofmt_xdate()来绘制斜的日期标签,以免它们彼此重叠。
dates,highs,lows = [], [], []
for row in reader:
current_date = datetime.strptime(row[0],"%Y-%m-%d")
dates.append(current_date)
high = int(row[1])
highs.append(high)
low = int(row[3])
lows.append(low)
#根据数据绘制图形
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs,c='red',alpha=0.5)
plt.plot(dates,lows,c='blue',alpha=0.5)
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)
实参alpha指定颜色的透明度,alpha值为0表示完全透明,1表示完全不透明。
dates,highs,lows = [], [], []
for row in reader:
try:
current_date = datetime.strptime(row[0],"%Y-%m-%d")
high = int(row[1])
low = int(row[3])
except ValueError:
print(current_date,'missing data')
else:
dates.append(current_date)
highs.append(high)
lows.append(low)
文件中因为缺少数据而引发ValueError错误时,使用try-except-else进行异常处理,可以指出错误并且继续运行程序。