绘制包含日期和 运行-time 的某些列的图形

Graphing certain columns that includes date and run-time

我需要帮助绘制数据文件(制表符分隔的 .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

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

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

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 轴日期可能相互重叠,但我相信如果您查看文档,您会找到一种倾斜它们的方法。祝你好运!