代码之家  ›  专栏  ›  技术社区  ›  Grayrigel

如何在pandas(python)中将时间对象转换为datetime格式?

  •  1
  • Grayrigel  · 技术社区  · 7 年前

    我对熊猫还不太熟悉,还练习了一些基本的功能。我有一个csv文件,其中包含某个日期每分钟的一些数据。读取csv之后, df.head() 给出以下结果:

            Time            C1  C2  C3  C4  C5  C6
    0  2016-05-25 03:15:00  0   0   0   0   0   0
    1  2016-05-25 03:16:00  0   0   0   0   0   0
    2  2016-05-25 03:17:00  0   0   2   0   0   0  
    3  2016-05-25 03:18:00  0   0   0   5   0   2
    4  2016-05-25 03:19:00  0   0   0   0   0   5
    

    我用过 parse_dates 选择 pd.read_csv 是的。因此,时间到了 datetime64[ns] 格式。因为,日期是一样的,我不想在我的专栏上出现。所以,我用

    df['Time']=df['Time'].dt.time
    

    它做了我想要的,但是它改变了格式 object ,这是我不想要的。根据其他一些答案的建议,我做了以下工作:

    df['Time']=pd.to_datetime(df['Time'], format="%H:%M:%S")
    df['Time'].head()
    
    0      1900-01-01 03:15:00
    1      1900-01-01 03:16:00
    2      1900-01-01 03:17:00
    3      1900-01-01 03:18:00
    4      1900-01-01 03:19:00
    Name: Time, dtype: datetime64[ns]
    

    这将列转换为 日期时间64[ns] 但又增加了一个日期。有可能把时间转换成 日期时间64[ns] 是吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   jezrael    7 年前

    不,不可能。因为约会时间总是需要日期。

    但如果需要与时俱进,最好是利用 timedelta S由 strftime 对于字符串 HH:MM:SS 具有 to_timedelta 以下内容:

    df['Time'] = pd.to_timedelta(df['Time'].dt.strftime('%H:%M:%S'))
    print (df)
          Time  C1  C2  C3  C4  C5  C6
    0 03:15:00   0   0   0   0   0   0
    1 03:16:00   0   0   0   0   0   0
    2 03:17:00   0   0   2   0   0   0
    3 03:18:00   0   0   0   5   0   2
    4 03:19:00   0   0   0   0   0   5
    
    print (df.dtypes)
    Time    timedelta64[ns]
    C1                int64
    C2                int64
    C3                int64
    C4                int64
    C5                int64
    C6                int64
    dtype: object