【问题标题】:How to subset a pandas dataframe column by a single date in a datetime column?如何按日期时间列中的单个日期对熊猫数据框列进行子集化?
【发布时间】:2020-05-13 16:36:35
【问题描述】:

所以我认为这应该是一个更简单的任务,但我找不到它。我有一个熊猫数据框如下

Company Id      DateTime               col1  col2       col3    col4   col5     col6
0   25502921    2018-08-16 10:23:36     0   175.000     0.0     0.0     0.0     0
1   25502921    2018-08-16 10:33:55     0   155.557     0.0     0.0     0.0     0
2   25502921    2018-08-16 10:43:55     0   153.615     0.0     0.0     0.0     0

type(df['DateTime'][0]) 输出pandas._libs.tslibs.timestamps.Timestamp

如何根据日期对数据框进行子集化?

df_tmp = df[df['DateTime'].dt.date=='16-08-2018'] 似乎不起作用,df_tmp = df[df['DateTime']=='16-08-2018'] 也不起作用

我可以尝试哪些其他直观的方法?

【问题讨论】:

    标签: python-3.x pandas datetime timestamp subset


    【解决方案1】:

    使用.dt.normalize() 将时间转换为00:00:00 但返回一个日期时间对象。

    df['DateTime'].dt.normalize().apply(type)
    pandas._libs.tslibs.timestamps.Timestamp
    

    print(df['DateTime'].dt.normalize())
    
    0   2018-08-16
    1   2018-08-16
    2   2018-08-16
    Name: DateTime, dtype: datetime64[ns]
    

    df[df['DateTime'].dt.normalize() == '2018-08-16']
    
       Company_Id            DateTime  col1     col2  col3  col4  col5  col6
    0    25502921 2018-08-16 10:23:36     0  175.000   0.0   0.0   0.0     0
    1    25502921 2018-08-16 10:33:55     0  155.557   0.0   0.0   0.0     0
    2    25502921 2018-08-16 10:43:55     0  153.615   0.0   0.0   0.0     0
    

    【讨论】:

      【解决方案2】:

      我相信当您将 DateTime 设置为索引时,您将获得更好的性能和更轻松的处理:

      df = pd.read_clipboard(sep = '\s{2,}',parse_dates=['DateTime'])
      df.set_index("DateTime").loc["2018-08-16"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-24
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        • 1970-01-01
        相关资源
        最近更新 更多