【问题标题】:pandas Timestamp to datetime.date熊猫时间戳到 datetime.date
【发布时间】:2020-12-06 06:39:34
【问题描述】:

我在将 pandas Series 转换为 datetime.datetime 时遇到问题。

我得到了 DataFrame - df,列 Timestamp 类型为:pandas._libs.tslibs.timestamps.Timestamp,列 Timestamp-end 类型:pandas._libs.tslibs.timedeltas.Timedelta

我在 SO:Converting pandas.tslib.Timestamp to datetime python 上找到了该主题,但有关该主题的建议无效。

是否有可能将其转换为日期时间?如果不是,如何从 Timestamp 类型的列中减去 Timestamp-end 以将日期和时间转换为 Timestamp 和 Timedelta 类型?

我如何创建时间戳列:

import adodbapi
import pandas as pd
import numpy as np
import datetime as dt

cursor = myConn.cursor()
cursor.execute(query)
# every row in query_list is type of SQLrow
query_list = [row for row in cursor]
df = pd.DataFrame({'TagAddress':[row[0] for row in query_list], 'Timestamp':[row[1] for row in query_list], 'Value':[row[3] for row in query_list]})

时间戳结束列:

df['Timestamp-end'] = pd.NaT
# in for loop, dict values are type of timestamps.Timestamp
df['Timestamp-end'].iloc[i] = df['Timestamp'].iloc[i] - current_errors_timestamp[curr_fault_key]

我的预期输出(结果列):

我只想从Timestamp 中减去Timedelta 以获得新列Timestamp。使用datetime.datetime 类型我可以毫无问题地做到这一点。

Timestamp               ErrorValue  Machine Station FAULT   Timestamp-end           Result
2020-06-20 08:01:09.562 370         T1      R1      1       0 days 00:00:06         2020-06-20 08:01:03
2020-06-20 08:01:21.881 370         T1      R1      0       0 days 00:00:12.319000  2020-06-20 08:01:09
2020-06-20 08:07:06.708 338         T1      R1      0       0 days 00:00:24.623000  2020-06-20 08:06:42
2020-06-20 08:07:31.041 338         T1      R1      0       0 days 00:00:18.333000  2020-06-20 08:07:13

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    我相信您需要将列转换为日期:

    df['Timestamp1'] = df['Timestamp'].dt.date
    

    或者更好的应该是删除时间,将它们设置为00:00:00

    df['Timestamp1'] = df['Timestamp'].dt.normalize()
    

    然后减去。

    编辑:您可以减去值,然后使用 Series.dt.floor 几秒钟:

    df['Timestamp-end'] = pd.to_timedelta(df['Timestamp-end'])
    df['Result'] = df['Timestamp'].sub(df['Timestamp-end']).dt.floor('S')
    print (df)
                    Timestamp  ErrorValue Machine Station  FAULT   Timestamp-end  \
    0 2020-06-20 08:01:09.562         370      T1      R1      1        00:00:06   
    1 2020-06-20 08:01:21.881         370      T1      R1      0 00:00:12.319000   
    2 2020-06-20 08:07:06.708         338      T1      R1      0 00:00:24.623000   
    3 2020-06-20 08:07:31.041         338      T1      R1      0 00:00:18.333000   
    
                   Result  
    0 2020-06-20 08:01:03  
    1 2020-06-20 08:01:09  
    2 2020-06-20 08:06:42  
    3 2020-06-20 08:07:12  
    

    【讨论】:

    • 我需要将日期和时间放在一列中。
    • 不明白,是否可以创建一些示例数据,4-5 行和预期的输出?
    • @aozk - 是否可以编辑输入数据、输出数据的问题,因为 cmets 格式错误?
    • 我在问题中添加了预期的输出。
    • 我的错!我使用to_datetime 而不是to_timedelta,现在一切正常,我得到了我想要的一切。感谢您的帮助!
    猜你喜欢
    • 2016-03-27
    • 2019-06-08
    • 1970-01-01
    • 2017-06-08
    • 2019-06-16
    • 2019-07-19
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多