Pandas:选择DataFrame日期范围内的行(日期时间索引)
在本文中,我们将介绍如何使用Pandas在数据帧中选择特定日期范围内的行。这在数据分析和处理中经常使用,因此这个主题是非常有用的。
阅读更多:Pandas 教程
Pandas DatetimeIndex
在Pandas中,DatetimeIndex是一个时间序列的索引,由一系列时间戳组成。通过将一列 pandas.Series 转换为 datetime64 类型,可以创建一个 DatetimeIndex。
import pandas as pd
data = pd.read_csv('data.csv', parse_dates=[0])
data.set_index('date', inplace=True)
print(data.index)
输出:
DatetimeIndex(['2019-10-01', '2019-10-02', '2019-10-03', '2019-10-04',
'2019-10-05', '2019-10-06', '2019-10-07', '2019-10-08',
'2019-10-09', '2019-10-10'],
dtype='datetime64[ns]', name='date', freq=None)
注意:如果不将索引设置为 DatetimeIndex,则无法按日期筛选数据。
Pandas DateRange 和 Timestamp
Pandas 中的 date_range() 函数可用于生成 DatetimeIndex,该函数接受多个参数来定义时间序列的开始和结束日期、频率和时区等。
例如,下面的代码可以生成两个日期之间的每一天:
import pandas as pd
start_date = '2019-01-01'
end_date = '2020-01-01'
date_range = pd.date_range(start=start_date,end=end_date,freq='D')
print(date_range)
输出:
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
'2019-01-09', '2019-01-10',
...
'2019-12-23', '2019-12-24', '2019-12-25', '2019-12-26',
'2019-12-27', '2019-12-28', '2019-12-29', '2019-12-30',
'2019-12-31', '2020-01-01'],
dtype='datetime64[ns]', length=366, freq='D')
另外,单个时间戳可以表示为 pandas.Timestamp 对象。
import pandas as pd
timestamp = pd.Timestamp('2020-01-01')
print(timestamp)
输出:
2020-01-01 00:00:00
Pandas:选择日期范围内的行
一旦有了 DatetimeIndex 索引和 DateRange 或 Timestamp 对象,就可以选择数据帧中特定日期范围内的行。
import pandas as pd
data = pd.read_csv('data.csv', parse_dates=[0])
data.set_index('date', inplace=True)
start_date = '2019-10-03'
end_date = '2019-10-06'
data_filtered = data.loc[start_date:end_date]
print(data_filtered)
输出:
value
date
2019-10-03 3
2019-10-04 4
2019-10-05 5
2019-10-06 6
还可以使用 Pandas 的 .loc() 方法选择日期范围内的行:
import pandas as pd
data = pd.read_csv('data.csv', parse_dates=[0], index_col='date')
start_date = '2019-10-03'
end_date = '2019-10-06'
data_filtered = data.loc[(data.index >= start_date) & (data.index <= end_date)]
print(data_filtered)
输出:
value
date
2019-10-03 3
2019-10-04 4
2019-10-05 5
2019-10-06 6
这种方法还可以通过组合多个日期范围来筛选数据,例如:
import pandas as pd
data = pd.read_csv('data.csv', parse_dates=[0], index_col='date')
start_date_1 = '2019-10-01'
end_date_1 = '2019-10-10'
start_date_2 = '2019-10-20'
end_date_2 = '2019-11-01'
data_filtered = data.loc[(data.index >= start_date_1) & (data.index <= end_date_1) |
(data.index >= start_date_2) & (data.index <= end_date_2)]
print(data_filtered)
输出:
value
date
2019-10-01 1
2019-10-02 2
2019-10-03 3
2019-10-04 4
2019-10-05 5
2019-10-06 6
2019-10-07 7
2019-10-08 8
2019-10-09 9
2019-10-10 10
2019-10-20 20
2019-10-21 21
2019-10-22 22
2019-10-23 23
2019-10-24 24
2019-10-25 25
2019-10-26 26
2019-10-27 27
2019-10-28 28
2019-10-29 29
2019-10-30 30
2019-10-31 31
总结
在本文中,我们学习了如何使用 Pandas 在数据帧中选择特定日期范围内的行,涉及到了 DatetimeIndex、DateRange、Timestamp 和 .loc() 方法的用法。这些知识对于数据处理和分析非常重要,在实际工作中也会经常使用。