【问题标题】:Graphing certain columns that includes date and run-time绘制包含日期和运行时间的某些列
【发布时间】:2019-12-20 19:43:11
【问题描述】:

我需要帮助绘制包含许多列和行的数据文件(制表符分隔的 .csv 文件)。

我只需要第 1 列和第 10 列来绘制图表。第一个(索引 0)列用于 X 轴,其中包含日期,第 10 列(索引 9)包含我尝试为 Y 轴绘制的运行时间。

我读取它们的日期值,以我希望它们的方式对其进行整形和排序,然后当我打印时,它只打印每行上的列名和所有行索引的 0。我相信我有循环问题,但不知道如何解决它。我尝试摆脱分配为每一行索引的 0,并仅在第一行保留列名以引用列。

我还尝试绘制与运行时间相对应的日期,但由于索引号被接受为参数,我的尝试没有成功。以下是我迄今为止尝试过的:

# Function to process the data files            
def file_processing (file_name):

    # reads the file using pandas and appends them in dict by rows' index numbers and times
    data_file=pandas.read_csv(file_name, sep="\t")
    for row in data_file.itertuples(index=False, name=False, ):
        datetime_obj = datetime.strptime(row[0],'%Y%m%dT%H%M%S')
        datetime_obj = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")

        lst = [datetime_obj]
        lst2 = [row[9]]

        df = pandas.DataFrame(list(zip(lst,lst2)),columns = ['Dates','RunTime'])
        df.sort_values(by=['Dates'])
        print(df)
        #print(df)

        pandas.DataFrame.plot('Dates','Runtime',)

我的样本数据如下:

20190601T034207 NAME    cc130.aa.bb NAME-7600816.2005   1   1   NAME-37x161 37x161  d39c13  2821    0   0ce000  1283 JOBS/NAME-7600816.2005/blast-37-161.txt
20190601T034214 NAME    cc128.aa.bb NAME-7600816.2004   1   1   NAME-37x161 37x161  d39c13  2815    0   0ce000  1283 JOBS/NAME-7600816.2004/blast-37-161.txt
20190601T034208 NAME    nn019.aa.bb NAME-7600816.2008   1   1   NAME-37x161 37x161  d39c13  3465    0   0ce000  1283 JOBS/NAME-7600816.2008/blast-37-161.txt
20190601T034220 NAME    nn058.aa.bb NAME-7600816.2010   1   1   NAME-37x161 37x161  d39c13  3462    0   0ce000  1283 JOBS/NAME-7600816.2010/blast-37-161.txt
20190601T034217 NAME    nn011.aa.bb NAME-7600816.2014   1   1   NAME-37x161 37x161  d39c13  3469    0   0ce000  1283 JOBS/NAME-7600816.2014/blast-37-161.txt
20190601T034219 NAME    nn224.aa.bb NAME-7600816.2015   1   1   NAME-37x161 37x161  d39c13  3468    0   0ce000  1283 JOBS/NAME-7600816.2015/blast-37-161.txt

注释掉绘图代码后运行程序得到的结果:

                 Dates  RunTime
0  2019-06-01 03:42:14     2815
                 Dates  RunTime
0  2019-06-01 03:42:08     3465
                 Dates  RunTime
0  2019-06-01 03:42:20     3462
                 Dates  RunTime
0  2019-06-01 03:42:17     3469
                 Dates  RunTime
0  2019-06-01 03:42:19     3468

如果我需要在不降级的情况下更新问题的任何部分,请告诉我。我真的很感激。我愿意接受任何建议。 非常感谢!

更新

在@MaMaG 发表评论后,我修复了代码并获得了工作代码。现在,我正在尝试将所有日期标签都放在 X 轴上。

工作代码

def file_processing (file_name):

    data_file = pandas.read_csv(file_name, delim_whitespace=True, header=None)
    data_file.rename(columns={0: 'date', 9:'run_time'}, inplace=True)
    data_file.sort_values(by='date',inplace=True)

    data_file['run_date'] = pandas.to_datetime(data_file.date, format='%Y%m%dT%H%M%S').dt.strftime("%Y-%m-%d %H:%M:%S")
    data_file.plot('run_date', 'run_time')
    plt.show()

当前图表

Current Graph

【问题讨论】:

    标签: python pandas date graph data-processing


    【解决方案1】:

    所以只想说,首先,pandas 数据框的一大特点是您可以对一行中的所有行应用单个操作,而无需执行耗时的 for 循环!

    这里可能更接近你想要的:

    data_file = pandas.read_csv('../stack_data.csv', delim_whitespace=True, header=None)
    data_file['run_date'] = pandas.to_datetime(data_file[0], format='%Y%m%dT%H%M%S').dt.strftime("%Y-%m-%d %H:%M:%S")
    data_file.rename(columns={9: 'run_time'}, inplace=True)
    data_file.plot('run_date', 'run_time')
    plt.show()
    

    没有循环,没有一次处理每一行。无需将每一行视为一个元组或使用 zip。 x 轴日期可能彼此重叠,但我敢肯定,如果您查看文档,您会找到一种使它们倾斜的方法。祝你好运!

    【讨论】:

    • 感谢您的快速帮助,@MaMaG 我已经尝试过并在我的帖子中进行了更新。这是工作。我现在遇到的问题是它显示了两个数字。一张是空的,一张有数据图表。我不知道为什么我有两个数字显示。我会试着自己弄清楚。但现在的主要问题是调整它,以便我可以一次显示所有数据,但能够将 X 轴中的所有日期作为标签。
    • 如果您在 ipython 笔记本中运行该代码,则不需要 plt.show()。删掉就好了。
    • 我正在使用 python project.py 在 Linux 环境中运行它。这就是为什么我必须使用 plt.show()。否则,它不会显示结果图
    • 你知道我可以在这个程序中使用散景的任何方法吗?使用该工具会非常有帮助,因为 X 轴有很多日期项目。我想要这样的东西。它不一定是散景,因为导入库会给我一个错误,但我想做这样的事情来做悬停:docs.bokeh.org/en/latest/docs/user_guide/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2020-04-07
    • 1970-01-01
    • 2016-12-26
    • 2021-12-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多