看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
at_time()
是 pandas 中用于筛选特定时间点的行数据的方法。它主要用于具有 DatetimeIndex
或 TimedeltaIndex
的 DataFrame 或 Series。这个方法对于时间序列数据的分析非常有用。
DataFrame.at_time(time, asof=False, axis=None)
time:
datetime.time
或者 字符串格式的时间(如 '14:30'
)DatetimeIndex
或 TimedeltaIndex
,将返回与该时间点匹配的所有行。asof:
bool
,默认为 False
False
:只返回完全匹配 time
的行。True
:返回最接近 time
的行(即asof
模式)。这种情况通常用于金融数据分析,获取某时间点之前最近的数据。axis:
int
或 None
,默认为 None
None
(默认)表示在索引上操作。axis=0
时,在行索引上操作。axis=1
时,在列索引上操作。at_time()
可以方便地提取特定时间点的所有记录,如每天的开盘价、某个时间的温度等。at_time(asof=True)
获取某个时间点之前最接近的数据点。at_time()
可以帮助快速过滤出所有符合条件的记录。i = pd.date_range('2018-04-09', periods=4, freq='12h')
ts = pd.DataFrame({'A': [1, 2, 3, 4]}, index=i)
ts
'''
A
2018-04-09 00:00:00 1
2018-04-09 12:00:00 2
2018-04-10 00:00:00 3
2018-04-10 12:00:00 4
'''
ts.at_time('12:00')
'''
A
2018-04-09 12:00:00 2
2018-04-10 12:00:00 4
'''
例1: 基础用法
假设有一个包含日期和时间的 DatetimeIndex
的 DataFrame,每天记录多个时间点的数据。
import pandas as pd
import numpy as np
# 构造示例数据
date_rng = pd.date_range(start='2023-01-01', end='2023-01-02', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0, 100, size=(len(date_rng)))
df.set_index('date', inplace=True)
# 筛选每天凌晨1点的数据
df_at_time = df.at_time('01:00')
print(df)
print(df_at_time)
输出:
'''
data
date
2023-01-01 00:00:00 15
2023-01-01 01:00:00 50
2023-01-01 02:00:00 95
2023-01-01 03:00:00 73
2023-01-01 04:00:00 19
... ...
2023-01-01 21:00:00 63
2023-01-01 22:00:00 24
2023-01-01 23:00:00 78
2023-01-02 00:00:00 31
2023-01-02 01:00:00 64
[26 rows x 1 columns]
data
date
2023-01-01 01:00:00 50
2023-01-02 01:00:00 64
'''
在这个例子中,at_time('01:00')
提取了每天凌晨1点的数据。
例2: 使用 asof=True
模式
假设您有一个金融数据集,记录了每天多个时间点的价格。您希望提取某个时间点之前最近的价格。
import pandas as pd
import numpy as np
# 构造示例数据
date_rng = pd.date_range(start='2023-01-01', end='2023-01-02', freq='2H')
df = pd.DataFrame(date_rng, columns=['date'])
df['price'] = np.random.randint(100, 200, size=(len(date_rng)))
df.set_index('date', inplace=True)
# 使用 asof 模式筛选接近某时间点的价格
df_asof = df.at_time('07:00', asof=True)
print(df)
print(df_asof)
输出:
'''
price
date
2023-01-01 00:00:00 132
2023-01-01 02:00:00 187
2023-01-01 04:00:00 177
2023-01-01 06:00:00 122
2023-01-01 08:00:00 149
2023-01-01 10:00:00 140
2023-01-01 12:00:00 165
2023-01-01 14:00:00 145
2023-01-01 16:00:00 131
2023-01-01 18:00:00 193
2023-01-01 20:00:00 135
2023-01-01 22:00:00 166
2023-01-02 00:00:00 108
price 122
Name: 2023-01-01 06:00:00, dtype: int64
'''
在这个例子中,at_time('07:00', asof=True)
返回了时间点06:00
的价格,因为这是早于07:00
的最近数据点。
at_time()
是一个非常有用的方法,特别是在处理时间序列数据时。它可以帮助您快速提取特定时间点的数据,或者使用 asof
模式获取某个时间点之前最近的记录。通过使用不同的参数设置,您可以在各种时间序列分析场景中灵活运用这个方法。
更新时间:2024-08-09 08:27:28 标签:pandas python 时间 筛选