我需要图形化数据文件(制表符分隔的.csv文件)的帮助,该文件包括许多列和行。
我只需要第1列和第10列即可绘制图形。第一列(索引0)用于保存日期的X轴,第十列(索引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()
答案 0 :(得分:0)
因此,首先要说的是,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轴日期可能彼此重叠,但是我敢肯定,如果您仔细阅读文档,将会找到一种倾斜它们的方法。祝你好运!