【问题标题】:How to remove the date information in a column, just keep time如何去掉一列中的日期信息,只需保持时间
【发布时间】:2014-07-04 05:11:13
【问题描述】:

我正在使用熊猫数据框。有一个特定的列有时间信息。

原始数据是这样的:

5:15am
5:28am
6:15am

所以我需要将原始数据转换为日期时间格式:

format = '%I:%M%p'
dataset['TimeStamp'] = pd.to_datetime(dataset['TimeStamp'],format)

但是,我得到了:

2014-07-04 05:15:00
2014-07-04 05:28:00
2014-07-04 06:15:00

我不想要年份和日期信息,只想要时间。我怎样才能删除它。谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    以下内容会将您拥有的内容转换为 datetime.time() 对象:

    dataset['TimeStamp'] = pd.Series([val.time() for val in dataset['TimeStamp']])
    

    输出

      TimeStamp
    0  05:15:00
    1  05:28:00
    2  06:15:00
    

    【讨论】:

    • 最好做pd.DatetimeIndex(dateset['TimeStamp']).time虽然结果相同
    • @Jeff,谢谢。这对我有用,而不是公认的解决方案。
    • 原来我想要val.date()这个答案给了我灵感:)
    【解决方案2】:

    因为版本0.17.0你可以这样做

    dataset['TimeStamp'].dt.time
    

    对于早于0.17.0的版本:

    您只需调用 apply 并访问 datetime 对象上的 time 函数即可像这样最初创建列,而无需进行后期处理:

    In [143]:
    
    dataset['TimeStamp'] = pd.to_datetime(dataset['TimeStamp'],format).apply(lambda x: x.time())
    dataset
    Out[143]:
      TimeStamp
    0  05:15:00
    1  05:28:00
    2  06:15:00
    

    【讨论】:

      【解决方案3】:

      只需使用datetime.time() 函数

      datetime.time()
      返回具有相同小时、分钟、秒和微秒的时间对象。 tzinfo 为无。另见方法 timetz()。

      这将返回一个datetime.time 对象,您可以使用time.hour time.minutetime.second 属性访问数据。

      【讨论】:

        【解决方案4】:

        your_date_df.dt.time

        假设您的日期和时间列是df['arrived_date']

        0   2015-01-06 00:43:00
        1   2015-01-06 07:56:00
        2   2015-01-06 11:02:00
        3   2015-01-06 11:22:00
        4   2015-01-06 15:27:00
        Name: arrived_date, dtype: datetime64[ns]
        

        使用 pandas,您只需要:

        df['arrived_time']=df['arrived_date'].dt.time 
        

        新列df['arrived_time'] 将如下所示:

        0    00:43:00
        1    07:56:00
        2    11:02:00
        3    11:22:00
        4    15:27:00
        Name: arrived_time, dtype: object
        

        观察新列df['arrived_time']不再是datetime64类型,列的类型只是pandasobject

        【讨论】:

          【解决方案5】:

          使用 pandas 有一种更简单的方法,尽管大多数(如果不是所有)解决方案都是正确的

          df.TimeStamp = pd.to_datetime(df.TimeStamp).dt.strftime('%H:%M')
          

          【讨论】:

            【解决方案6】:

            dataset['TimeStamp']=dataset['TimeStamp'].str.slice(11,18)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-11-01
              • 2023-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多