我的数据框的时间由2个coloumns组成:date
和HrMn
,如下所示:
我如何及时阅读它们并绘制时间序列图? (还有其他值列,例如speed
)。
我想我可以逃脱time.strptime('19900125'+'1200','%Y%m%d%H%M')
但问题是,当从csv
读取时,HrMn
上的0000
会被解析为0
,所以
time.strptime('19900125'+'0','%Y%m%d%H%M')
会失败。
更新:
我目前的做法:
# When reading the data, pase HrMn as string
df = pd.read_csv(uipath,header=0, skipinitialspace=True, dtype={'HrMn': str})
df['time']=df.apply(lambda x:datetime.strptime("{0} {1}".format(x['date'],x['HrMn']), "%Y%m%d %H%M"),axis=1)# df.temp_date
df.index= df['time']
# Then parse it again as int
df['HrMn'] = df['HrMn'].astype(int)
答案 0 :(得分:2)
您可以在将pd.to_datetime
转换为看起来像日期的字符串后使用http://localhost:9090:
def to_date_str(r):
d = r.date[: 4] + '-' + r.date[4: 6] + '-' + r.date[6: 8]
d += ' '+ r.HrMn[: 2] + ':' + r.HrMn[2: 4]
return d
>>> pd.to_datetime(df[['date', 'HrMn']].apply(to_date_str, axis=1))
0 1990-01-25 12:00:00
dtype: datetime64[ns]
修改
正如@EdChum评论,你可以更简单地做到这一点
pd.to_datetime(df.date.astype(str) + df.HrMn)
哪个字符串连接列。
答案 1 :(得分:2)
您可以在阅读CSV时直接解析日期,其中HrMn
为零填充为HHMM,即值0表示00:00
:
df = pd.read_csv(
uipath,
header=0,
skipinitialspace=True,
dtype={'HrMn': str},
parse_dates={'datetime': ['date', 'HrMn']},
date_parser=lambda x, y: pd.datetime.strptime('{0}{1:04.0f}'.format(x, int(y)),
'%Y%m%d%H%M'),
index_col='datetime'
)
答案 2 :(得分:0)
我不知道为什么你把它称为“格式不正确”,这种格式实际上非常普遍,而且pandas可以按原样解析它,只需指定要解析为时间戳的列。
df = pd.read_csv(uipath, skipinitialspace=True,
parse_dates=[['date', 'HrMn']])