【问题标题】:Sort and Filter data from a Panda Dataframe according to date range根据日期范围对 Panda Dataframe 中的数据进行排序和过滤
【发布时间】:2016-06-16 18:44:51
【问题描述】:

我的数据框有两列:(i) 字符串格式的日期列和 (ii) int 值。我想将日期字符串转换为日期对象,然后根据日期范围过滤和排序数据。将一个字符串转换为日期可以正常工作:

date = dateutil.parser.parse(date_string)
date = ("%02d:%02d:%02d" % (date.hour, date.minute, date.second))

如何迭代数据框中的所有值并应用解析,然后我可以使用 df 上的 panda 库对数据进行过滤和排序,如下所示?

df.sort(['etime'])
df[df['etime'].isin([begin_date, end_date])]

我的数据框数据示例如下:

          etime                        instantaneous_ops_per_sec
3    2016-06-15T15:30:09Z                         26
4    2016-06-15T15:30:14Z                         26
5    2016-06-15T15:30:19Z                         24
6    2016-06-15T15:30:24Z                         27

【问题讨论】:

  • 我认为您可能希望df['etime'].between(begin_date, end_date) 而不是使用isin 进行过滤。使用isin 只会返回Truebegin_dateend_date 完全匹配的日期。对于包含在 begin_dateend_date 之间的日期,使用 between 将返回 True

标签: python pandas filter dataframe


【解决方案1】:

你想使用pd.to_datetime:

df['etime'] = pd.to_datetime(df['etime'], format="%H:%M:%S")

【讨论】:

  • 我收到以下错误:df['etime'] = pd.to_datetime(df['etime'], format="%H:%M:%S") 时间数据 u'2016-06-15T15:30:09Z' 与格式 '%H:%M:%S' 不匹配(匹配)
  • 我得到了同样的错误,但它适用于我而不指定格式:pd.to_datetime(df['etime'])
  • 两个建议都有效:下面的格式或没有根建议的格式 - 谢谢!
【解决方案2】:

试试这个:

df['etime'] = pd.to_datetime(df['etime'], format="%Y%m%d %H:%M:%S")
df[df['etime'].between([begin_date, end_date])]

注意:由于您的代码显示date,而您使用time,然后按time 排序。结果可能不是你想要的。您通常希望先过滤然后排序,但 OP 中的代码却相反。

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 2020-02-15
    • 1970-01-01
    • 2012-09-17
    • 2021-01-10
    • 2016-11-25
    • 2021-10-16
    • 2019-04-29
    • 1970-01-01
    相关资源
    最近更新 更多