PythonPandas高级教程之时间处理
时间处理是数据分析中常用的操作之一,而Python中的Pandas库提供了强大的时间处理功能。本篇文章将介绍Pandas中一些常用的时间处理函数,包括:
- 时间数据类型的转换:将字符串类型转换为日期类型
- 时间序列数据类型的创建:手动创建时间序列,或使用Pandas提供的函数
- 时间序列数据类型的分割:按年、月、日、小时、分钟、秒等进行分割
- 时间序列数据类型的运算:加、减、比较等运算
- 时间序列的重采样:聚合时间序列数据
时间数据类型的转换
Pandas提供了to_datetime函数,可以将字符串类型的时间数据转换为日期类型。例如,将字符串“20210101”转换为日期类型,可以使用以下代码:
import pandas as pd
str_date = '20210101'
date = pd.to_datetime(str_date, format='%Y%m%d')
print(date)
输出结果为:
2021-01-01 00:00:00
其中,format参数用于指定字符串的格式,%Y代表年份,%m代表月份,%d代表日期。
时间序列数据类型的创建
Pandas提供了date_range和to_datetime函数,可以手动创建时间序列,或从字符串创建时间序列。例如,创建一个以天为单位的时间序列,可以使用以下代码:
import pandas as pd
date_range = pd.date_range(start='20210101', end='20211231', freq='D')
print(date_range)
输出结果为:
DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
'2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08',
'2021-01-09', '2021-01-10',
...
'2021-12-22', '2021-12-23', '2021-12-24', '2021-12-25',
'2021-12-26', '2021-12-27', '2021-12-28', '2021-12-29',
'2021-12-30', '2021-12-31'],
dtype='datetime64[ns]', length=365, freq='D')
其中,start参数和end参数用于指定时间范围,freq参数用于指定时间间隔单位。
时间序列数据类型的分割
Pandas提供了resample函数和groupby函数,可以将时间序列数据按年、月、日、小时、分钟、秒等进行分割,并对分割后的数据进行聚合操作。例如,将上面创建的时间序列按月进行分割,然后求每个月的平均值,可以使用以下代码:
import pandas as pd
import numpy as np
date_range = pd.date_range(start='20210101', end='20211231', freq='D')
data = pd.Series(np.random.rand(len(date_range)), index=date_range)
monthly_data = data.resample('M').mean()
print(monthly_data)
输出结果为:
2021-01-31 0.520988
2021-02-28 0.508527
2021-03-31 0.516518
2021-04-30 0.527215
2021-05-31 0.471758
2021-06-30 0.476567
2021-07-31 0.508490
2021-08-31 0.471604
2021-09-30 0.503567
2021-10-31 0.457233
2021-11-30 0.528649
2021-12-31 0.545118
Freq: M, dtype: float64
其中,resample函数的参数用于指定分割单位,mean函数用于求平均值。
时间序列数据类型的运算
与常规数据类型类似,Pandas提供了多种时间类型的运算,包括加、减、比较等。例如,将一个以天为单位的时间序列加上一个以月为单位的时间间隔,可以使用以下代码:
import pandas as pd
date_range = pd.date_range(start='20210101', end='20211231', freq='D')
date_range_monthly = date_range + pd.offsets.MonthEnd(0)
print(date_range_monthly)
输出结果为:
DatetimeIndex(['2021-01-31', '2021-01-31', '2021-01-31', '2021-01-31',
'2021-01-31', '2021-01-31', '2021-01-31', '2021-01-31',
'2021-01-31', '2021-01-31',
...
'2021-12-31', '2021-12-31', '2021-12-31', '2021-12-31',
'2021-12-31', '2021-12-31', '2021-12-31', '2021-12-31',
'2021-12-31', '2021-12-31'],
dtype='datetime64[ns]', length=365, freq=None)
其中,MonthEnd(0)代表月底,offsets是Pandas中用于表示时间间隔的类。
时间序列的重采样
重采样是指将时间序列的采样频率从高频率变为低频率(降采样),或从低频率变为高频率(升采样)。Pandas提供了resample函数和asfreq函数,可以对时间序列进行重采样。例如,将一个以秒为单位的时间序列重采样为以10秒为单位的时间序列,可以使用以下代码:
import pandas as pd
import numpy as np
date_range = pd.date_range(start='20210101', end='20210102', freq='s')
data = pd.Series(np.random.rand(len(date_range)), index=date_range)
data_10s = data.resample('10s').mean()
print(data_10s)
输出结果为:
2021-01-01 00:00:00 0.613445
2021-01-01 00:00:10 0.446550
2021-01-01 00:00:20 0.516796
2021-01-01 00:00:30 0.494489
2021-01-01 00:00:40 0.514170
2021-01-01 00:00:50 0.464848
2021-01-01 00:01:00 0.553214
2021-01-01 00:01:10 0.446254
2021-01-01 00:01:20 0.404981
2021-01-01 00:01:30 0.607369
Freq: 10S, dtype: float64
其中,resample函数的参数用于指定重采样后的时间间隔,mean函数用于求平均值。
另外,当采样频率变低时,有可能会出现缺失值。使用asfreq函数可以将时间序列中缺失值填充为指定的值,例如:
import pandas as pd
import numpy as np
date_range = pd.date_range(start='20210101', end='20210102', freq='s')
data = pd.Series(np.random.rand(len(date_range)), index=date_range)
data_10s = data.resample('10s').asfreq().fillna(0)
print(data_10s)
输出结果为:
2021-01-01 00:00:00 0.329236
2021-01-01 00:00:10 0.000000
2021-01-01 00:00:20 0.000000
2021-01-01 00:00:30 0.000000
2021-01-01 00:00:40 0.000000
2021-01-01 00:00:50 0.000000
2021-01-01 00:01:00 0.259759
2021-01-01 00:01:10 0.000000
2021-01-01 00:01:20 0.000000
2021-01-01 00:01:30 0.000000
Freq: 10S, dtype: float64
其中,asfreq函数的参数用于指定重采样后的时间间隔,fillna函数用于填充缺失值。
以上就是PythonPandas高级教程之时间处理的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Pandas高级教程之时间处理 - Python技术站