【问题标题】:Pandas dataframe datetime to time then to seconds熊猫数据框日期时间到时间然后到秒
【发布时间】:2018-06-16 04:33:08
【问题描述】:

我有一个数据框。一列包含时间戳。我想删除日期并将时间转换为秒。

首先我将它们转换为日期时间:

In:
df_time = pd.to_datetime(df["Timestamp"])

Out:
0     2017-11-07 13:09:00
1     2017-11-07 13:11:00
2     2017-11-07 13:13:00
3     2017-11-07 13:15:00
dtype: datetime64[ns]

然后我删除了日期:

In:
df_time = pd.Series([val.time() for val in df_time])

Out:
0      13:09:00
1      13:11:00
2      13:13:00
3      13:15:00
4      13:17:00
dtype: object

但是它们变成了对象,我没有设法将它们转换为类似日期时间的对象以将它们转换为秒。我知道有一些类似的线程我通过它们。

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    由于您要将其转换为日期时间序列,因此只需使用基本数学来获取秒数,即

    df_time = pd.to_datetime(df["Timestamp"])
    
    (df_time.dt.hour*60+df_time.dt.minute)*60 + df_time.dt.second
    
    0    47340
    1    47460
    2    47580
    3    47700
    Name: Timestamp, dtype: int64
    

    【讨论】:

    • 在我实现之后,它给出了两个错误:1:TypeError:无法将 类型的对象转换为 datetimelike 索引 2:AttributeError:只能使用带有 datetimelike 值的 .dt 访问器
    • 第一步需要df["Timestamp"] = pd.to_datetime(df["Timestamp"]) ;)
    【解决方案2】:

    我认为你需要timedeltas 由to_timedeltatimessplit 创建并选择第二个lists 由str[1],然后total_seconds 并最后转换为int

    df_time = pd.to_timedelta(df["Timestamp"].str.split().str[1]).dt.total_seconds().astype(int)
    print (df_time)
    0    47340
    1    47460
    2    47580
    3    47700
    Name: Timestamp, dtype: int32
    

    详情:

    print (df["Timestamp"].str.split().str[1])
    0    13:09:00
    1    13:11:00
    2    13:13:00
    3    13:15:00
    Name: Timestamp, dtype: object
    
    print (pd.to_timedelta(df["Timestamp"].str.split().str[1]))
    0   13:09:00
    1   13:11:00
    2   13:13:00
    3   13:15:00
    Name: Timestamp, dtype: timedelta64[ns]
    

    或者如果需要秒表datetimes 使用dt.second:

    df_time = pd.to_datetime(df["Timestamp"]).dt.second
    print (df_time)
    0    0
    1    0
    2    0
    3    0
    Name: Timestamp, dtype: int64
    

    【讨论】:

    • 也许 str 对于日期时间列来说有点太多了
    • 嗯,问题是不是日期时间列,所以第一步是转换为日期时间。
    【解决方案3】:

    如果您要减去持续时间,请使用以下以秒为单位进行转换 (tsession['EndTime'] -tsession['StartTime'])/np.timedelta64(1, 's')

    【讨论】:

      猜你喜欢
      • 2019-06-16
      • 1970-01-01
      • 2022-10-12
      • 2022-09-25
      • 2019-07-21
      • 2014-01-01
      • 2020-07-01
      • 1970-01-01
      相关资源
      最近更新 更多