【问题标题】:Multiple selection in pandas dataframe by DateTimeIndex通过 DateTimeIndex 在 pandas 数据框中进行多项选择
【发布时间】:2026-02-08 08:05:02
【问题描述】:

我正在尝试根据列表选择数据框中的某些行。如果您将数据帧的索引设置为 DatetimeIndex,您可以通过以下方式选择:

example_df['2018-12-12']

但是你不能像这样选择多个日期:

example_df[['2018-12-12', '2018-12-05']]

我知道我可以执行以下操作,但我不想输入整个列表以防它更长:

example_df['2018-12-12'] & example_df['2018-12-05'] & ...

我也知道我可以使用 isin() 方法,但我想利用 pandas 中的本地日期选择器,因为我相信它更快。

代码如下:

genesis_block_date = pd.to_datetime('01/03/2009 18:15:05 GMT')
end_date = pd.to_datetime('01/03/2029')

# Halving dates
halving_dates = ['November 28, 2012', 'July 9th, 2016', '14 May, 2020']
halving_dates = pd.to_datetime(halving_dates)

approx_block_gen_time = pd.to_timedelta('10m')
date_range = pd.date_range(start=genesis_block_date, end=end_date, freq=approx_block_gen_time)

columns = ['days_until_halving']
df_new_features = pd.DataFrame(index=date_range, columns=columns)
df_new_features[halving_dates] = ...

【问题讨论】:

    标签: python pandas dataframe datetimeindex


    【解决方案1】:

    问题是您有一个日期时间索引,但您尝试使用字符串(它不包含)从中进行选择。

    您必须向 .loc[ ] 选择方法提供日期时间对象列表。 pd.to_datetime([日期列表]) 完成这项工作:

    example_df.loc[pd.to_datetime(['2018-12-12', '2018-12-05'])]
    

    请记住,您只能通过为选择提供列表来选择列:

    example_df[['2018-12-12', '2018-12-05']]
    

    所以你得到一个错误,因为没有这样的列......

    【讨论】:

    • 非常感谢,它成功了。我不知道为什么,但很明显 .loc 期待相同的对象类型(我的意思是索引类型)。但有趣的是,正如我在 OP 中所说,常规选择器只接受一个日期:example_df['2018-12-12']