绘制包含日期和 运行-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 轴日期可能相互重叠,但我相信如果您查看文档,您会找到一种倾斜它们的方法。祝你好运!
我需要帮助绘制数据文件(制表符分隔的 .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 轴日期可能相互重叠,但我相信如果您查看文档,您会找到一种倾斜它们的方法。祝你好运!