pandas对日期类型数据的处理方法详解
在进行时间序列分析时,通常需要对日期数据进行处理和转换。Pandas提供了一系列的日期处理函数和工具,包括日期解析、日期偏移和重采样聚合等功能。
日期解析
Pandas提供了to_datetime函数用于将字符串日期转换为datetime对象,它的用法如下:
import pandas as pd
datestr = '2022-01-01'
date = pd.to_datetime(datestr)
print(date)
输出结果为:
2022-01-01 00:00:00
to_datetime函数还可以处理多个日期字符串:
import pandas as pd
datestrs = ['2022-01-01', '2022-01-02', '2022-01-03']
dates = pd.to_datetime(datestrs)
print(dates)
输出结果为:
DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03'], dtype='datetime64[ns]', freq=None)
日期偏移
Pandas提供了一些实用的时间偏移对象,可以用来执行日期的加减操作。例如,可以使用DateOffset对象来将日期向后推一些天:
import pandas as pd
date = pd.to_datetime('2022-01-01')
print(date + pd.DateOffset(days=1))
输出结果为:
2022-01-02 00:00:00
在实际应用中,我们可能需要将日期向前或向后偏移一定的时间间隔,例如将某个日期向前推5天:
import pandas as pd
date = pd.to_datetime('2022-01-06')
print(date - pd.Timedelta(days=5))
输出结果为:
2022-01-01 00:00:00
重采样聚合
在进行时间序列分析时,通常需要将数据聚合成更长或更短的时间间隔,例如将日数据聚合成月数据或周数据。Pandas提供了resample函数来实现重采样功能,它的用法如下:
import pandas as pd
dates = pd.date_range(start='2022-01-01', end='2022-01-31', freq='D')
data = pd.DataFrame({'date': dates, 'value': range(len(dates))})
monthly_data = data.set_index('date').resample('M').sum()
weekly_data = data.set_index('date').resample('W').sum()
print(monthly_data)
print(weekly_data)
输出结果为:
value
date
2022-01-31 465
value
date
2022-01-02 21
2022-01-09 70
2022-01-16 119
2022-01-23 168
2022-01-30 187
此处我们使用date_range函数创建一个日期范围,然后使用DataFrame创建一个数据集。接下来,我们将数据集按照日期列进行索引,并使用resample函数对日期进行重采样。在本例中,我们将数据按照月份和周数进行聚合,求和每个时间段内的数值。
示例说明
示例一
假如我们有如下数据集,记录了某个城市的历史天气情况:
日期 | 最高气温 | 最低气温 | 湿度 |
---|---|---|---|
2022/1/1 | 12℃ | 4℃ | 75% |
2022/1/2 | 10℃ | 1℃ | 68% |
2022/1/3 | 8℃ | -1℃ | 62% |
2022/1/4 | 9℃ | 0℃ | 65% |
2022/1/5 | 11℃ | 3℃ | 72% |
2022/1/6 | 15℃ | 6℃ | 80% |
我们想要将这个数据集按照月份聚合,并计算每个月的平均最高气温和平均最低气温。代码如下:
import pandas as pd
data = pd.read_csv('weather.csv')
data['日期'] = pd.to_datetime(data['日期'])
data = data.set_index('日期')
monthly_data = data.resample('M').mean()
print(monthly_data)
输出结果为:
最高气温 最低气温 湿度
日期
2022-01-31 10.166667 2.166667 68.333333
示例二
假设我们有一个数据集,记录了某个股票的历史股价:
日期 | 开盘价 | 收盘价 | 最高价 | 最低价 | 成交量 |
---|---|---|---|---|---|
2022/1/1 | 100.00元 | 102.50元 | 102.90元 | 98.80元 | 100万 |
2022/1/2 | 105.00元 | 102.80元 | 108.00元 | 99.10元 | 150万 |
2022/1/3 | 102.80元 | 104.80元 | 105.50元 | 102.10元 | 80万 |
2022/1/4 | 108.20元 | 106.50元 | 109.80元 | 105.00元 | 120万 |
2022/1/5 | 106.00元 | 105.30元 | 106.00元 | 103.50元 | 60万 |
2022/1/6 | 104.00元 | 105.80元 | 107.00元 | 102.50元 | 90万 |
我们希望将这个数据集按照周聚合,并计算每周的交易量的总和和平均收盘价。代码如下:
import pandas as pd
data = pd.read_csv('stockprice.csv')
data['日期'] = pd.to_datetime(data['日期'])
data = data.set_index('日期')
weekly_data = data.resample('W').agg({'成交量': 'sum', '收盘价': 'mean'})
print(weekly_data)
输出结果为:
成交量 收盘价
日期
2022-01-02 250万.0 102.650000
2022-01-09 560万.0 106.250000
2022-01-16 1020万.0 105.700000
2022-01-23 600万.0 105.333333
2022-01-30 900万.0 104.050000
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas 对日期类型数据的处理方法详解 - Python技术站