熊猫时间戳到datetime.date

时间:2020-08-17 06:22:48

标签: python pandas datetime

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

我得到了DataFrame-df,其列类型为pandas._libs.tslibs.timestamps.Timestamp的列 Timestamp 和列类型为pandas._libs.tslibs.timedeltas.Timedelta的列 Timestamp-end enter image description here

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

是否有可能将其转换为日期时间?如果没有,如何从类型的时间戳列中减去时间戳结束,以将日期和时间转换为时间戳和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]

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

我只想从Timedelta中减去Timestamp以得到新列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

1 个答案:

答案 0 :(得分:2)

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

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