熊猫:情节日期和时间与价值

时间:2018-03-23 22:03:39

标签: python pandas datetime matplotlib plot

在pandas中,我的数据框具有以下结构:

raw_data = {'date': ['1975-07-03','1975-07-03','1975-07-04','1975-08-01'], 
    'time': [515,1014,1401,1201], 'value': [1,-1,2,11]}
df = pd.DataFrame(raw_data, columns = ['date', 'time', 'value'])

这个问题与this类似,但我无法弄清楚如何修改它。

我需要在列“value”中绘制值,而不是两列“date”“time”。请注意,此处“time”确实是 hh:mm

修改

由于年份在x轴上没有变化,我应该以“月 - 小时:分钟”格式提供日期和时间

2 个答案:

答案 0 :(得分:1)

IIUC:

(df.assign(date=pd.to_datetime(df['date'] + ' ' + df['time'].astype(str).replace(r'(\d){2})(\d{2})', r'\1:\2')))
   .plot(x='date', y='value'))

enter image description here

答案 1 :(得分:0)

扩展另一个答案,包括将特定数据点标记为ticklabels / ticks,可以使用date2num将日期转换为其刻度位置。可能有更好的方法来操作matplotlib中的日期格式,但这种方法可行。

编辑:如果少于4个字符,请确保填充hhmm,更多ideomatic pandas

import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd


raw_data = {'date': ['1975-07-03','1975-07-03','1975-07-04','1975-08-01'], 
    'time': [415,1014,1401,1201], 'value': [1,-1,2,11]}

def fix_time_str(df):
    df['date'] = (df['date'] + ' ' + 
                  df['time'].apply(lambda x: str(x).zfill(4)).replace(r'(\d){2})(\d{2})', r'\1:\2'))
    return df

df = (pd.DataFrame(raw_data, columns = ['date', 'time', 'value'])).pipe(fix_time_str).assign(date= lambda x: pd.to_datetime(x['date']))

fig, ax = plt.subplots(1,1, figsize = (8,5))

xtick_locs = mpl.dates.date2num(df['date'].tolist())
xtick_labels = df['date'].astype(str).tolist()
xtick_labels = ["{}-{}".format(*i.split('-')[1:])[:-3] for i in xtick_labels]

ax.plot(df['date'], df['value'])

ax.set_xticks(xtick_locs)
ax.set_xticklabels(xtick_labels)
ax.tick_params(axis='x', rotation=90)

enter image description here