【问题标题】:Pandas: plot date and time vs valuePandas:绘制日期和时间与值的关系
【发布时间】:2018-09-02 16:11:05
【问题描述】:

在 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 轴上的年份没有变化,我应该有格式为“月-日时:分”的日期和时间

【问题讨论】:

    标签: python pandas datetime matplotlib plot


    【解决方案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'))
    

    【讨论】:

    • 我想在 x 轴上显示我的数据集中的实际点,格式为“月日时:分”
    • 您的意思是要以该格式在 X 轴上标记数据集中的实际点吗?
    • @djakubosky 是的
    【解决方案2】:

    扩展其他答案以包括将特定数据点标记为刻度标签/刻度可以通过使用 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)
    

    【讨论】:

    • 如果在“时间”列中我有 513 之类的值,代表 05:13,我得到错误。知道如何解决吗? (我已经更新了问题)
    • 我通过零填充解决了这个问题,您可能需要修改答案
    • 啊,我明白了,我会在里面添加它
    猜你喜欢
    • 2019-06-09
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2019-03-20
    • 2017-04-24
    相关资源
    最近更新 更多