我有两个DateTime字符串。我将如何比较它们并确定先到哪个?
import pandas as pd
import matplotlib.pyplot as plt
data = [('cycle',[1,1,2,2,3,3,4,4]),
('A',[0.1,0.5,0.2,0.6,0.15,0.43,0.13,0.59]),
('B',[ 500, 600, 510,580,512,575,499,598]),
]
df = pd.DataFrame.from_items(data)
#print(df)
x = df['A']
y = df['B']
if df['cycle']==2:
plt.plot(x,y)
答案 0 :(得分:2)
此格式中包含毫秒,因此time.strptime
无法对其进行解析。我选择根据最后一个冒号进行拆分,解析左部分,然后手动转换右部分,将它们加在一起。
A = '2019-02-12 15:01:45:145'
B = '2019-02-12 15:02:02:22'
import time
def parse_date(s):
date,millis = s.rsplit(":",1)
return time.mktime(time.strptime(date,"%Y-%m-%d %H:%M:%S")) + int(millis)/1000.0
print(parse_date(A))
print(parse_date(B))
打印:
1549958505.145
1549958522.022
现在比较结果而不是打印它们以获得所需的结果
如果您的毫秒约定不同(例如,此处22
也可能表示220
),则略有不同。在右边填充零,然后解析:
def parse_date(s):
date,millis = s.rsplit(":",1)
millis = millis+"0"*(3-len(millis)) # pad with zeroes
return time.mktime(time.strptime(date,"%Y-%m-%d %H:%M:%S")) + int(millis)/1000.0
在这种情况下,结果为:
1549958505.145
1549958522.22
答案 1 :(得分:0)
如果两个日期/时间字符串均为ISO 8601格式(YYYY-MM-DD hh:mm:ss),则可以将它们与一个简单的字符串比较进行比较,如下所示:
a = '2019-02-12 15:01:45.145'
b = '2019-02-12 15:02:02.022'
if a < b:
print('Time a comes before b.')
else:
print('Time a does not come before b.')
但是,您的字符串中还有一个额外的':',之后是...毫秒?我不确定。但是,如果将它们转换为标准的hh:mm:ss.xxx ...格式,那么您的日期字符串将自然具有可比性。
如果无法更改以hh:mm:ss:xx
格式接收这些字符串的事实(我假设xx
是毫秒,但只有您可以肯定地说),那么您可以通过解析最终的“:xx”并将其重新附加为“ .xxx”来对字符串进行“调整”,如下所示:
def mungeTimeString(timeString):
"""Converts a time string in "YYYY-MM-DD hh:mm:ss:xx" format
to a time string in "YYYY-MM-DD hh:mm:ss.xxx" format."""
head, _, tail = timeString.rpartition(':')
return '{}.{:03d}'.format(head, int(tail))
然后通过以下方式调用它:
a = '2019-02-12 15:01:45.145'
b = '2019-02-12 15:02:02.022'
a = mungeTimeString(a)
b = mungeTimeString(b)
if a < b:
print('Time a comes before b.')
else:
print('Time a does not come before b.')