Issues Reading Dates from .txt File Python
我目前有一个脚本,我将其用于在将其转换为.txt后绘制csv文件的一部分。 在这个时候,它完美地工作,除了当我将第0列中的日期更改为序数形式时(我已经这样做了所以我可以将所有值读作浮点数并在第4列上执行计算),Python剔除了小时,分钟和秒。 我仍然需要小时和分钟,因为当我绘制数据时,它会在一天开始时绘制我的所有点数。 有没有办法可以做到这一点,并保持时间和日期? 我已经尝试将日期转换为字符串而另一列转换为浮点数,但它变得非常混乱和混乱。 这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import datetime import csv from numpy import ma def skip_first(seq,n): for i, item in enumerate(seq): if i >= n: yield item g = open('soundTransit1_remote_rawMeasurements_15m.txt', 'w') with open('soundTransit1_remote_rawMeasurements_15m.dat', 'rb') as f: csvreader = csv.reader(f) for row in skip_first(csvreader,4): for row in csv.reader(f,delimiter=',',skipinitialspace=True): print >>g,"\t".join(row) g.close() def date2str(date_str): date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S') return date.toordinal() def readfiles(file_list): """ read <TAB> delemited files as strings ignoring '# Comment' lines""" data = [] for fname in file_list: data.append( np.loadtxt(fname, usecols=(0,4), comments='#', # skip comment lines delimiter='\t', converters = { 0 : date2str }, dtype=None)) return data data = readfiles(['soundTransit1_remote_rawMeasurements_15m.txt']) data_1 = ma.fix_invalid(data, fill_value = 'nan') column_0 = np.array(data_1)[0][:,0] airTempRaw = np.array(data_1)[0][:,1] #Compute Air Temperature airTempRs_ohms = 23100*(airTempRaw/(1-airTempRaw)) airTemp_degC = -39.17*np.log(airTempRs_ohms) + 410.43 def init_plot(title, yMin=-10, yMax=40): plt.figure(figsize=(24, 12)) plt.title(title + disclamers) plt.xlabel(xtext) plt.ylabel(ytext) #plt.xlim(xMin,xMax) plt.ylim(yMin,yMax) plt.grid() #plt.xticks(np.arange(xMin,xMax+1)) def end_plot(name=None, cols=5): plt.legend(bbox_to_anchor=(0, -.1, 1, -0.5), loc=8, ncol=cols, mode="expand", borderaxespad=-1., scatterpoints=1) if name: plt.savefig(name, bbox_inches='tight') disclamers = (' USGS PROVISIONAL DATA' ' SUBJECT TO REVISION' ) xtext = ('Date & Time') ytext = ('Air Temperature, deg C') init_plot('Air Temperature') plt.plot(column_0, airTemp_degC, linestyle='-', color='b', label='Air Temperature') plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d %H:%M')) plt.gca().xaxis.set_minor_locator(mdates.HourLocator(interval=6)) plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=1)) end_plot(name='py_airTemp.png') |
在此先感谢您的帮助!
您没有说明日期列的格式是什么,但我认为问题在于
从matplotlib查看此示例:http://matplotlib.org/examples/pylab_examples/load_converter.html?highlight = strpdate2num
我相信这应该有效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from matplotlib.dates import strpdate2num def readfiles(file_list): """ read <TAB> delemited files as strings ignoring '# Comment' lines""" data = [] for fname in file_list: data.append( np.loadtxt(fname, usecols=(0,4), comments='#', # skip comment lines delimiter='\t', converters = { 0 : strpdate2num('%Y-%m-%d %H:%M:%S') }, dtype=None)) return data |