【问题标题】:How to replace timestamp across the columns using pandas如何使用 pandas 跨列替换时间戳
【发布时间】:2019-09-26 08:33:13
【问题描述】:
df = pd.DataFrame({
 'subject_id':[1,1,2,2],
 'time_1':['2173/04/11 12:35:00','2173/04/12 12:50:00','2173/04/11 12:59:00','2173/04/12 13:14:00'],
 'time_2':['2173/04/12 16:35:00','2173/04/13 18:50:00','2173/04/13 22:59:00','2173/04/21 17:14:00'],
  'val' :[5,5,40,40],
  'iid' :[12,12,12,12]   
 })
df['time_1'] = pd.to_datetime(df['time_1'])
df['time_2'] = pd.to_datetime(df['time_2'])
df['day'] = df['time_1'].dt.day

目前我的数据框如下所示

我想将time_1 列中的时间戳替换为00:00:00,将time_2 列替换为23:59:00

这是我尝试过的,但它不起作用

df.groupby(df['subject_id'])['time_1'].apply(lambda x: pd.datetime.strftime(x, "%H:%M:%S") == "00:00:00")   #approach 1

df.groupby(df['subject_id'])['time_1'].apply(lambda x: pd.pd.Timestamp(hour = '00', second = '00')) #approach 2

我希望我的输出数据框如下所示

【问题讨论】:

    标签: python python-3.x pandas dataframe datetime


    【解决方案1】:

    如果所有日期时间在同一列中都有 00:00:00 时间,则我不显示它。

    使用Series.dt.floorSeries.str.normalize 删除时间,第二次添加DateOffset

    df['time_1'] = pd.to_datetime(df['time_1']).dt.floor('d')
    #alternative
    #df['time_1'] = pd.to_datetime(df['time_1']).dt.normalize()
    df['time_2']=pd.to_datetime(df['time_2']).dt.floor('d') + pd.DateOffset(hours=23, minutes=59)
    df['day'] = df['time_1'].dt.day
    
    print (df)
       subject_id     time_1              time_2  val  iid  day
    0           1 2173-04-11 2173-04-12 23:59:00    5   12   11
    1           1 2173-04-12 2173-04-13 23:59:00    5   12   12
    2           2 2173-04-11 2173-04-13 23:59:00   40   12   11
    3           2 2173-04-12 2173-04-21 23:59:00   40   12   12
    

    【讨论】:

    • 其实我看到00:00:00 是不可见的。是否有可能使它们可见?还是就像我导出到 csv 时一样,我会看到它们?赞成
    • @SSMK - 刚刚测试,在excel中添加00:00:00
    猜你喜欢
    • 2018-03-04
    • 2019-11-22
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2018-10-09
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多