【发布时间】: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()
当前图表
【问题讨论】:
标签: python pandas date graph data-processing