熊猫:如何阅读不合格的时间数据?

时间:2016-02-29 08:32:51

标签: python pandas

我的数据框的时间由2个coloumns组成:dateHrMn,如下所示:

enter image description here

我如何及时阅读它们并绘制时间序列图? (还有其他值列,例如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)

3 个答案:

答案 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']])