从给定日期的时间序列数据中选择所有行(按时间戳记)

时间:2019-06-22 19:39:59

标签: python pandas dataframe

我的数据框有很多天的时间戳索引和一列数据。我想检索特定日期的数据。

raw_df = 
                            Temp
TIMESTAMP                       
2015-01-01 09:50:00-05:00  0.064
2015-01-01 09:51:00-05:00  0.236
2015-01-01 09:52:00-05:00  0.268
2015-01-01 09:53:00-05:00  0.072
2015-01-01 10:07:00-05:00  0.059
2015-01-02 10:08:00-05:00  0.189
2015-01-02 10:09:00-05:00  0.198
2015-01-02 10:10:00-05:00  0.258
2015-01-02 10:11:00-05:00  0.587
2015-01-03 10:12:00-05:00  0.780
2015-01-03 10:13:00-05:00  0.990
2015-01-03 10:14:00-05:00  1.022
2015-01-03 10:15:00-05:00  1.275
2015-01-04 10:16:00-05:00  1.256
2015-01-04 10:17:00-05:00  1.255
2015-01-04 10:18:00-05:00  1.254
2015-01-04 10:19:00-05:00  1.305
2015-01-04 10:20:00-05:00  1.347
2015-01-04 10:21:00-05:00  1.434
2015-01-05 10:22:00-05:00  1.397

我想提取2015年1月4日的数据,下面给出我的代码

i = 2015-01-04
raw_df['Temp'].loc[i]

但这会导致错误

SyntaxError: invalid token

1 个答案:

答案 0 :(得分:2)

有很多选项,但是所有这些选项都需要弥合datetime索引和日期字符串之间的差距。

布尔索引

# df[df.index.tz_localize(None).floor('D') == '2015-01-04']
df[df.index.floor('D') == '2015-01-04']
# Or,
df[df.index.normalize() == '2015-01-04']

或者,仅选择“温度”,请使用loc

df.loc[df.index.floor('D') == '2015-01-04', 'Temp']

TIMESTAMP
2015-01-04 10:16:00-05:00    1.256
2015-01-04 10:17:00-05:00    1.255
2015-01-04 10:18:00-05:00    1.254
2015-01-04 10:19:00-05:00    1.305
2015-01-04 10:20:00-05:00    1.347
2015-01-04 10:21:00-05:00    1.434
Name: Temp, dtype: float64

使用Index.get_loc切片

# df.iloc[df.index.get_loc('2015-01-04')]
df.iloc[df.index.get_loc('2015-01-04'), df.columns.get_loc('Temp')]

TIMESTAMP
2015-01-04 10:16:00-05:00    1.256
2015-01-04 10:17:00-05:00    1.255
2015-01-04 10:18:00-05:00    1.254
2015-01-04 10:19:00-05:00    1.305
2015-01-04 10:20:00-05:00    1.347
2015-01-04 10:21:00-05:00    1.434
Name: Temp, dtype: float64