Python-csv文件读取(csv,datetime,matplotlib)

1 CSV文件介绍

        可视化的数据以两种常见格式存储:CSV和JSON。

        要在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值(comma-separated values)写入文件。这样的文件称为 CSV 文件。

CSV文件格式:(通过逗号隔开)

2 代码

说明:

(1)通过csv模块读取csv文件

(2)通过datetime模块format日期格式

current_date=datetime.strptime(row[2],'%Y-%m-%d')

(3)通过matplotlib模块制作不表,通过ax.fill_between填充两组数据之间的颜色。       

ax.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)

代码:

'''通过CSV模块读取csv文件中的数据'''
#导入CSV模块
import csv

'''打印温度图表'''
import matplotlib.pyplot as plt
from datetime import datetime  # 添加日期

'''读取csv文件'''
#CSV文件存放地址
filename = 'sitka_weather_07-2018_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)#读取第一行
    print(header_row)
    for index, column_header in enumerate(header_row):
        print(index, column_header)#打印序号和表头,一边后面读取数据

    #从文件中获取最高温度
    highs=[]
    lows=[]
    dates=[]
    for row in reader:
        #格式化时间
        current_date=datetime.strptime(row[2],'%Y-%m-%d')
        dates.append((current_date))#读取日期
        try:#避免5和6列丢失数据,int无法转换报错
            high=int(row[5])#从index可以看出,TMAX处在第5列,使用int转换为数值格式
            low=int(row[6])#从index可以看出,TMIN处在第5列,使用int转换为数值格式
        except ValueError:
            print(f"Missing data for {current_date}.")
        else:
            highs.append(high)
            lows.append(low)

    '''可视化处理'''
    plt.rcParams['font.sans-serif']='SimHei' # 用来正常显示中文标签,黑体
    plt.rcParams['axes.unicode_minus'] = False  # 字符显示,用来正常显示负号
    plt.style.use('seaborn')
    fig,ax=plt.subplots()
    ax.plot(dates,highs,c='red')
    ax.plot(dates,lows,c='blue')
    ax.set_title("2018年7月每日最高温度",fontsize=24,fontproperties='SimHei')
    ax.set_ylabel('温度(F)',fontsize=14,fontproperties='SimHei')
    ax.set_xlabel('时间',fontsize=14,fontproperties='SimHei')
    fig.autofmt_xdate()#自动调整X轴label倾斜的角度
    ax.tick_params(axis='both',which='major',labelsize=14)
    # 填充highs,lows之间的颜色
    ax.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)
    plt.show()

结果:

表头:
['STATION', 'NAME', 'DATE', 'PRCP', 'TAVG', 'TMAX', 'TMIN']
打印表头需要对应关系:
0 STATION
1 NAME
2 DATE
3 PRCP
4 TAVG
5 TMAX
6 TMIN

3 以字典方式读取并更新数据类型

(1)字典方式读取

#导入CSV模块
import csv
f_csv=csv.DictReader(f)

(2)更新数据类型

  • 声明一个自定义的类型转换器field_types;
  • 循环生成一个可迭代的对象(key,conversion(row[key]);
  • 最后更新一下字典里面相同的key,比如row[‘PRCP’]的内容就会被更新了

代码:

#导入CSV模块
import csv

'''打印温度图表'''
import matplotlib.pyplot as plt
from datetime import datetime  # 添加日期

'''读取csv文件'''
#CSV文件存放地址
filename = 'sitka_weather_07-2018_simple.csv'

with open(filename) as f:
    f_csv=csv.DictReader(f)
    for row in f_csv:
        # 打印每一行,每一行都是字典的格式打印出来
        print(f"打印一行:{row}")
        #打印某一项
        print('打印一个key及其value:STATION:',row['STATION'])
        #声明自定义的类型转换器field_types
        field_types=[('PRCP',float),('TMAX',int),('TMIN',int)]
        #统一进行数据类型的转换,相当于逐个更新key对应的value值类型
        row.update((key,conversion(row[key])) for key,conversion in field_types)
        print(f"数据类型转换后打印一行:{row}")

执行结果:

可以看到PRCP转换成了float类型,TMAX和TMIN转换成了INT类型

打印一行:{'STATION': 'USW00025333', 'NAME': 'SITKA AIRPORT, AK US', 'DATE': '2018-07-01', 'PRCP': '0.25', 'TAVG': '', 'TMAX': '62', 'TMIN': '50'}
打印一个key及其value:STATION: USW00025333
数据类型转换后打印一行:{'STATION': 'USW00025333', 'NAME': 'SITKA AIRPORT, AK US', 'DATE': '2018-07-01', 'PRCP': 0.25, 'TAVG': '', 'TMAX': 62, 'TMIN': 50}
打印一行:{'STATION': 'USW00025333', 'NAME': 'SITKA AIRPORT, AK US', 'DATE': '2018-07-02', 'PRCP': '0.01', 'TAVG': '', 'TMAX': '58', 'TMIN': '53'}
打印一个key及其value:STATION: USW00025333
数据类型转换后打印一行:{'STATION': 'USW00025333', 'NAME': 'SITKA AIRPORT, AK US', 'DATE': '2018-07-02', 'PRCP': 0.01, 'TAVG': '', 'TMAX': 58, 'TMIN': 53}
.......

参考资料《python编程:从入门到实践》

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值