【问题标题】:How can I plot the duration of a program in python如何在python中绘制程序的持续时间
【发布时间】:2017-07-28 20:33:28
【问题描述】:

我正在尝试绘制一些在夜间运行的程序的持续时间,我将程序持续时间数据导出到 CSV 文件中,以便稍后进行分析。 (类似这样)

这是我的代码和 CSV 示例:

CSV:

 na,programName,totaal,na,startDate,endDate,Date
 ?,"to/check.apl",54006,?,2017-02-27T20:04:07.233,2017-02- 27T20:05:01.239,2017-02-27T00:00:00.000
 ?,"to/ibx.apl",143887,?,2017-02-27T20:07:55.627,2017-02-27T20:10:19.514,2017-02-27T00:00:00.000
 ?,"to/checker.apl",2039600,?,2017-02-27T20:14:37.662,2017-02-27T20:48:37.262,2017-02-27T00:00:00.000

python 代码:

 import matplotlib
 from pandas import *
 import pandas as pd
 import numpy  as np
 import matplotlib.pyplot as plt

 matplotlib.style.use('ggplot')

 data = "miFile.csv"
 df = pd.DataFrame.from_csv(data)
 df = df.set_index('totaal')

 newDf = df[['programName','startDate','endDate']]

到目前为止,我遇到了日期时间错误,所以我尝试通过这样做来解决这个问题(也没有运气):

 newDf['startDate'] = pd.to_datetime(newDf['startDate'])
 newDf['endDate'] = pd.to_datetime(newDf['endDate'])

 #pd.to_datetime(pd.Series(["2017-02-27T20:04:07.233"]) format= "%d, %m, %y, %H: %M: %S")

 newDf.plot('programName','startDate','endDate')

 plt.show()

【问题讨论】:

    标签: python csv pandas matplotlib dataframe


    【解决方案1】:

    我认为您需要read_csv 来创建df,然后获取列的差异以及convert timedeltaminutesplot

    temp=u"""na,programName,totaal,na,startDate,endDate,Date
    ?,"to/check.apl",54006,?,2017-02-27T20:04:07.233,2017-02-27T20:05:01.239,2017-02-27T00:00:00.000
    ?,"to/ibx.apl",143887,?,2017-02-27T20:07:55.627,2017-02-27T20:10:19.514,2017-02-27T00:00:00.000
    ?,"to/checker.apl",2039600,?,2017-02-27T20:14:37.662,2017-02-27T20:48:37.262,2017-02-27T00:00:00.000"""
    #after testing replace 'StringIO(temp)' to 'filename.csv'
    df = pd.read_csv(StringIO(temp), index_col=[2], parse_dates=[4,5,6])
    
    print (df.dtypes)
    na                     object
    programName            object
    na.1                   object
    startDate      datetime64[ns]
    endDate        datetime64[ns]
    Date           datetime64[ns]
    dtype: object
    
    df['duration'] = (df['endDate'] - df['startDate']).astype('timedelta64[m]')
    newDf = df[['programName','duration']]
    print (newDf)
                programName  duration
    totaal                           
    54006      to/check.apl       0.0
    143887       to/ibx.apl       2.0
    2039600  to/checker.apl      33.0
    
    newDf.plot()
    
    plt.show()
    

    【讨论】:

    • 谢谢,这很好用,我用newDf.plot('programName','duration') 来搞定它,我还用astype('timedelta64[s]') 在几秒钟内搞定它。但我只看到 7 个程序名称,应该是 70。
    • 如果测试print (df)只有7行?
    • print(df) 给了我这个:[70 rows x 6 columns]
    • 很遗憾,这是保密的,我无法分享,抱歉。
    • 问题仍然存在,但我认为它与情节中的线条(刻度)有关。
    【解决方案2】:

    我建议您使用 pandas.read_csv() 而不是 pandas.DataFrame.from_csv()。 然后我会考虑将天与小时分开的 T。

    【讨论】:

      【解决方案3】:

      感谢 jezreal,这就是我的最终解决方案的样子,并且运行良好。我在几秒钟内绘制,因为 1 分钟以下的程序将被忽略,这在我的情况下是不准确的。

      import matplotlib
      from pandas import *
      import pandas as pd
      import matplotlib.pyplot as plt
      
      matplotlib.style.use('ggplot')
      
      data = "miFile.csv"
      df = pd.read_csv(data,index_col=[2], parse_dates=[4,5,6])
      
      df['duration'] = (df['endDate'] - df['startDate']).astype('timedelta64[s]')
      newDf = df[['programName','duration']]
      
      newDf.plot('programName','duration')
      plt.show()
      

      【讨论】:

        猜你喜欢
        • 2013-07-25
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2015-09-10
        • 2021-10-26
        • 1970-01-01
        相关资源
        最近更新 更多