【问题标题】:Trouble selecting records based on date in python/pandas在 python/pandas 中根据日期选择记录时遇到问题
【发布时间】:2019-12-09 06:23:00
【问题描述】:

我的数据框 df_events 中有一个名为“程序日期时间”的列。我已经使用 df_events.ProgramDateTime.dt.date 和 df_events.ProgramDateTime.dt.time 成功地为 EventDate 和 EventTime 创建了单独的列。

当我尝试选择两个日期之间的记录时,出现了我的问题。无论我尝试什么,我似乎都会遇到各种类型错误。

我是一个相对较新的 Python/pandas 用户,最近才熟悉数据框。我正在使用 Python3.7。

我尝试过使用 strptime,甚至只是尝试根据原始列 ProgramDateTime 选择记录。

我也在用 Sublime Text 写这段代码

import pandas as pd, numpy as np
from datetime import datetime


File_Path = 'path'
Event_csv = 'file.csv'

df_event = pd.read_csv(File_Path+Event_csv)

# Indicate analysis period
StartDate = datetime.strptime('2018-08-08', '%Y-%m-%d')
EndDate = datetime.strptime('2019-07-01', '%Y-%m-%d')


# Change appropriate column in Events dataframe to make sure in Datetime format.
df_event['ProgramDateTime'] = pd.to_datetime(df_event['ProgramDateTime'])

#Create separate columns for Event Date and Time in dataframe
df_event['EventDate'], df_event['EventTime'] = df_event.ProgramDateTime.dt.date, df_event.ProgramDateTime.dt.time

# Create dataframe of programs occurring only during analysis period
df_event_ap = df_event[df_event['EventDate']>=StartDate and df_event['EventDate']<=EndDate]

print(df_event_ap.dtypes)
print(df_even_ap.head(11))

我希望看到一个新的数据框 df_events_ap,其中仅包含 StartDate 和 EndDate 之间的那些记录。

相反,问题发生在 Python 应该选择记录时(最后一个注释 (#) 行下方的代码。)

我收到此错误:

TypeError: 无法将 datetime.datetime 与 datetime.date 进行比较

【问题讨论】:

  • 能否请您编辑您的问题,以便阅读您的代码。

标签: python pandas datetime


【解决方案1】:

我能发现的第一件事是你的df_event['EventDate']。这需要再次转换为日期时间格式:

df_event['EventDate'] = pd.to_datetime(df_event['EventDate'])

然后做:

from datetime import datetime

StartDate = datetime.strptime('2018-08-08', '%Y-%m-%d')
EndDate = datetime.strptime('2019-07-01', '%Y-%m-%d')

既然StartDateEndDatedf_event['EventDate'] 都是相同的格式,你必须这样做:

df_event_ap = df_event[(df_event['EventDate']>=StartDate) & (df_event['EventDate']<=EndDate)]

您现在将获得两个输出:

第一个打印语句的输出:

print(df_event_ap.dtypes)
ProgramDateTime    datetime64[ns]
EventDate          datetime64[ns]
EventTime                  object
dtype: object

第二个打印语句的输出:

print(df_event_ap.head(11))
      ProgramDateTime  EventDate EventTime
0 2018-12-20 12:46:52 2018-12-20  12:46:52
2 2018-12-25 12:46:52 2018-12-25  12:46:52
4 2018-11-20 12:46:52 2018-11-20  12:46:52
5 2018-12-10 12:46:52 2018-12-10  12:46:52

【讨论】:

  • 很高兴听到这个消息。 :) 请将答案标记为已接受,因为它可以在将来帮助其他人。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
相关资源
最近更新 更多