Python Pandas 数据中对时间的操作
1. Pandas中的时间类型
Pandas中有3种时间类型:Timestamp、DatetimeIndex、Period 。其中 Timestamp 可以看做它是Python 内置 datetime 模块的替代类。DatetimeIndex 是由时间戳 pandas.Timestamp 对象构成的索引,而 Period 表示的是一段时间(字符串, 如 ‘2017Q1’ 代表2017年第一季度)。
2. 时间的索引
在Pandas中可以将时间作为行或列索引,从而更方便地对时间序列进行处理。
2.1 基于时间的索引
使用 Pandas 的 DataFrame 或 Series 对象创建时间序列的时候,可以使用 Pandas 中的 datetime 或其他日期解析库直接对字符串进行解析,也可以将所有的日期存储为Python的 datetime 对象后再转化成时间序列。
下面是一个将时间作为行索引的示例代码:
import pandas as pd
df = pd.DataFrame({'weight': [62, 68, 80, 93],
'age': [22, 34, 56, 68]},
index=pd.date_range(start='20210101', end='20210104', freq='D'))
print(df)
输出结果:
weight age
2021-01-01 62 22
2021-01-02 68 34
2021-01-03 80 56
2021-01-04 93 68
2.2 时间的切片和筛选
在本例中,我们使用了 pd.date_range 创建从 2021-01-01 到 2021-01-04 的时间序列,并将其作为 DataFrame 的行索引。可以使用 loc 方法基于时间来进行数据的切片和筛选:
print(df.loc['2021-01-02':'2021-01-03'])
输出结果:
weight age
2021-01-02 68 34
2021-01-03 80 56
3. 时间的变换
可以使用 Pandas 的时间函数对时间进行各种处理,例如计算时间差、更改时间单位或格式。
3.1 计算时间差
可以使用 Pandas 的时间差函数计算两个时间之间的差,例如:
import pandas as pd
start_time = pd.Timestamp('20210101')
end_time = pd.Timestamp('20210301')
time_diff = end_time - start_time
print("Time difference: {}".format(time_diff))
输出结果:
Time difference: 59 days 00:00:00
3.2 更改时间单位或格式
可以使用 strftime 函数来更改时间格式,例如:
import pandas as pd
df = pd.DataFrame({'datetime': pd.date_range(start='20210101', end='20210104', freq='D'),
'value': [62, 68, 80, 93]})
df['year'] = df['datetime'].dt.year
df['month'] = df['datetime'].dt.strftime('%b')
df['weekday'] = df['datetime'].dt.weekday
print(df)
输出结果:
datetime value year month weekday
0 2021-01-01 62 2021 Jan 4
1 2021-01-02 68 2021 Jan 5
2 2021-01-03 80 2021 Jan 6
3 2021-01-04 93 2021 Jan 0
在以上示例中,我们使用了 Pandas 中的 dt 属性(DatetimeProperties)来访问日期时间信息并往 DataFrame 中添加新列,其中 month 属性将给出日期的月份的缩写形式, weekday属性将表示该日期是周几。