数据来源:数据来源:和鲸社区-Numpy+Pandas数据处理·第五关–wind.csv
主要内容:
- 数据读取时的参数设置-parse_dates
- 数据类型查看
- 自定义函数修复数据
- 将日期设置为索引
- 统计每列的缺失值和非缺失值
- 创建数据框,计算最大值,最小值,均值,标准差
- 以年为频率进行重采样
导入数据
import pandas as pd
import datetime
filepath6 = "/home/mw/input/Pandas_exercise2020/wind.csv"
wind = pd.read_csv(filepath6, sep='\s+')
wind.head()
添加参数 parse_dates
filepath6 = "/home/mw/input/Pandas_exercise2020/wind.csv"
wind = pd.read_csv(filepath6, sep='\s+', parse_dates=[[0,1,2]])
# parse_dates 表示将某一列设置为 时间类型
wind.head()
查看数据类型
wind.info()
自定函数
# 2061年?我们真的有这一年的数据?创建一个函数并用它去修复这个bug
def change_year(x):
year = x.year - 100 if x.year > 1999 else x.year
return datetime.date(year, x.month, x.day)
wind['Yr_Mo_Dy'] = wind['Yr_Mo_Dy'].apply(change_year).astype('datetime64[ns]')
# 转换日期类型方法:
# 法一:astype('datetime64[ns]')
# 法二:pd.to_datetime(Series)
wind.head()
将日期设置为索引
# 将日期设为索引,注意数据类型,应该是datetime64[ns]
wind.set_index('Yr_Mo_Dy', inplace=True)
wind.head()
##### 计算缺失值和非缺失值的数量
# 对应每一个location,一共有多少数据值缺失
wind.isnull().sum()
# 对应每一个location,一共有多少完整的数据值
wind.notnull().sum()
创建数据框,计算局均值,最值,标准差
# 创建一个名为loc_stats的数据框去计算并存储每个location的风速最小值,最大值,平均值和标准差
import numpy as np
loc_stats = wind.agg(['min', 'max', 'mean', 'std']).round(2) #或者用np.min,np.max,np.mean,np.std
loc_stats
# 创建一个名为day_stats的数据框去计算并存储所有location的风速最小值,最大值,平均值和标准差
day_stats = wind.agg([np.min, np.max, np.mean, np.std], axis=1)
day_stats.head()
# 对于每一个location,计算一月份的平均风速
# 注意,1961年的1月和1962年的1月应该区别对待
wind['date'] = wind.index
wind['year'] = wind['date'].apply(lambda x: x.year)
wind['month'] = wind['date'].apply(lambda x: x.month)
wind['day'] = wind['date'].apply(lambda x: x.day)
january_winds = wind.query('month==1') #query等同于wind[wind.month==1]
january_winds.mean()
对数据以年为频率进行重采样-query
wind.query('month == 1 and day == 1').head()
# df.query(expr,inplace = False,** kwargs )# 使用布尔表达式查询帧的列
# 参数:
# expr:str要评估的查询字符串。你可以在环境中引用变量,在它们前面添加一个'@'字符 。@a + b
# inplace=False:是否修改数据或返回副本
# kwargs:dict关键字参数
# 默认修改Python语法'&'/'and'和'|'/'or'位运算符优先级高于布尔表达式,不同于Python
# 关键字参数parser='python'执行Python评估。
# engine='python' 用Python本身作为后端来传递评估表达式。不建议效率低。
# 默认实例df.index和 df.columns属性 DataFrame放在查询命名空间中,
# 这允许您将框架的索引和列视为框架中的列。标识符index用于帧索引;
# 您还可以使用索引的名称在查询中标识它。