【问题标题】:select rows from a datetime column with pandas使用熊猫从日期时间列中选择行
【发布时间】:2021-01-12 01:24:51
【问题描述】:

我有一个包含许多列的数据框,其中之一 (receivedtime) 已正确转换为日期时间

id   receivedtime   
1    2020-09-08 00:35:12  
2    2020-09-09 06:16:09  
3    2020-09-10 12:47:04
4    2020-09-08 15:57:05

等等。我只想选择某一天的那些(这类似于这篇文章:subsets from a datetime column,这对我有帮助但对我不起作用)。我试图做一个简单的子代:

df[df["receivedtime"]=="2020-09-10"] 

但我得到了一个空的数据框作为回报。我相信它与小时分钟和秒有关。显然一种方法是从日期时间中删除该信息,但我想保留整个结构。我什至尝试使用 dt.datetime 但似乎没有任何效果。这里有什么问题?

感谢任何帮助。

【问题讨论】:

    标签: pandas datetime slice


    【解决方案1】:

    这是因为您的receivedtime 并不总是一个准确的日期,即时间等于00:00:00。例如,尝试dt.normalize() 从时间戳中获取日期:

     df[df["receivedtime"].dt.normalize()=="2020-09-10"] 
    

    输出:

       id        receivedtime
    2   3 2020-09-10 12:47:04
    

    【讨论】:

      【解决方案2】:

      您可以尝试以下方法将您的日期时间转换为日期

      df[pd.to_datetime(df["receivedtime"]).dt.strftime('%Y-%m-%d')=="2020-09-10"]
      

      【讨论】:

        【解决方案3】:

        首先通过在空格处分割日期来创建一个“新的”DataFrame

        new = df["receivedtime"].str.split(" ", expand = True)
        new
        

        输出

                     0        1
        0    2020-09-08 00:35:12  
        1    2020-09-09 06:16:09  
        2    2020-09-10 12:47:04  
        3    2020-09-08 15:57:05  
        

        然后使用布尔掩码

        df[new[0]=="2020-09-08"]
        

        输出:

            receivedtime
        0   2020-09-08 00:35:12
        3   2020-09-08 15:57:05
        

        你会得到所有的日期和时间

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-15
          • 2021-12-14
          • 2018-11-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多