【问题标题】:Plotting pandas dataframe with microseconds resolution以微秒分辨率绘制 pandas 数据帧
【发布时间】:2016-07-11 00:19:11
【问题描述】:

我正在尝试使用 python matplotlib 来绘制熊猫数据框。 DataFrame 有一个 'time' 列和一个 'val' 列。 'time' 列设置为索引,分辨率可达微秒。当我开始绘制它时,x 轴上的值完全关闭(超出数据的时间范围)。有什么问题?任何帮助表示赞赏。

下面是代码:

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

df = pd.read_csv("/tmp/a.csv")
df = df.set_index('time')

def plot1(df):
    ax = df.plot(y='val')
    ax.get_yaxis().get_major_formatter().set_useOffset(False)
    ax.get_xaxis().set_major_formatter(matplotlib.dates.DateFormatter("%H%M%S.%f"))
    plt.show()
    return ax

plot1(df)

“/tmp/a.csv”中的数据:

time,val
143642.229348,12
143642.250195,53
143642.252341,17
143642.254349,56
143642.311674,31
143642.313758,36
143642.320217,24
143642.339777,86

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    从 CSV 文件中读取 time 列后,您需要将其转换为 datetime

    df['time'] = pd.to_datetime(df['time'], format="%H%M%S.%f")
    

    您也可以在解析 CSV 文件时即时执行此操作:

    tm_parser = lambda x: pd.to_datetime(x, format="%H%M%S.%f")
    
    df = pd.read_csv('/tmp/a.csv',
                     sep=',',
                     parse_dates=['time'],
                     date_parser=tm_parser,
                     index_col='time')
    

    之后你就不需要matplotlib.dates.DateFormatter:

    In [147]: df.plot()
    Out[147]: <matplotlib.axes._subplots.AxesSubplot at 0x8201f60>
    

    【讨论】:

    • 太好了,效果很好。非常感谢您的帮助!
    • @freedo,我很高兴能帮上忙。如果对您有帮助,请accept回答 - 这将表明问题已得到回答
    • 即使超出了这个问题的确切范围,日期时间值的格式也很重要,正如 read_csv 参数所完成的那样。如果由于某种原因您在 DataFrame 列中有一系列日期时间值,请使用 pd.DatetimeIndex(df.col)
    猜你喜欢
    • 2018-10-29
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多