我的数据框有一个特定的列,其日期时间采用以下格式输出的格式:
df['A']
1/23/2008 15:41
3/10/2010 14:42
10/14/2010 15:23
1/2/2008 11:39
4/3/2008 13:35
5/2/2008 9:29
我需要将df['A']
转换为df['Date']
,df['Time']
和df['Timestamp']
。
我尝试使用
首先将df['A']
转换为日期时间
df['Datetime'] = pd.to_datetime(df['A'],format='%m/%d/%y %H:%M')
我将在上面创建我的三个列,但%m/%d
的格式代码不会获取单个数字的月份和日期。
有没有人知道快速解决这个问题?
答案 0 :(得分:2)
您的格式存在错误。作为@MaxU commented,如果您没有传递 SELECT TOP 1000 CONVERT(char(10), [DateAndTime], 108) as Time ,
tagtable.tagname,
digitaltagdescription.value,
digitaltagdescription.[status],
CASE digitaltagdescription.[STATUS]
WHEN 'Off' THEN
DATEDIFF(minute, Lag([DateAndTime], 1) OVER(ORDER BY [TagName], [DateAndTime]), [DateAndTime])
ELSE
NULL
END RunTime
FROM [TS_SCADA_DIGITAL].[dbo].[floatvalues]
INNER JOIN ts_scada_digital.dbo.tagtable
ON tagtable.tagindex = floatvalues.tagindex
INNER JOIN [dbo].[digitaltagdescription]
ON digitaltagdescription.tag_name = tagtable.tagname
AND digitaltagdescription.value = floatvalues.val
WHERE floatvalues.dateandtime > Cast(Getdate() AS DATE)
AND digitaltagdescription.tag_name LIKE 'Lift_STA\EASTS%'
ORDER BY dateandtime DESC
参数,那么pandas会自动将您的列转换为format
。
datetime
或者,修复你的代码 -
df['Timestamp'] = pd.to_datetime(df['A'])
对于您的第一个查询,请使用df['Timestamp'] = pd.to_datetime(df['A'], format='%m/%d/%Y %H:%M')
或dt.normalize
(感谢MaxU,以获取建议!) -
dt.floor
或者,
df['Date'] = df['Timestamp'].dt.normalize()
对于第二个查询,请使用df['Date'] = df['Timestamp'].dt.floor('D')
。
dt.time
df['Time'] = df['Timestamp'].dt.time
答案 1 :(得分:0)
我认为您可以使用%-m
代替%m
,如果这与strftime()
函数的工作方式相同。