Python将数据文件的时间戳读取为NAN

时间:2014-10-24 21:52:52

标签: python datetime matplotlib

我有文件,其中有69列,我想在python中绘制第1列对0。第0列是时间戳,在我的下面的代码中定义为x。那一个只是一直读作[nan]。任何人都可以帮助我如何将其作为时间戳访问并将其转换为实时参数。

原始程序的输出如下。

386L, 69L

1.02063350e+01   1.01029230e+01   1.01483550e+01   1.01322510e+01
1.01652060e+01   1.01666750e+01   1.00328040e+01   1.01037690e+01
1.01594840e+01   1.01917720e+01   1.02076490e+01   1.00984500e+01
1.01465400e+01   1.01099130e+01   9.93045400e+00   1.02702020e+01
1.02420290e+01   9.83942200e+00   1.01766670e+01   1.03041800e+01
1.01142430e+01   9.99233500e+00   1.02056930e+01   9.96160800e+00
1.02312710e+01   1.01937070e+01   1.00662410e+01   1.00564220e+01
1.03316840e+01   1.02984290e+01   1.01553350e+01   1.02485920e+01
1.01057070e+01   1.01322900e+01   9.85602100e+00   1.01304120e+01
1.01867200e+01   1.01230980e+01   1.04255890e+01   1.02276980e+01
9.97088100e+00   1.02358880e+01   1.02324460e+01   1.01739110e+01
9.90378000e+00   1.02250190e+01   1.01972960e+01   1.01434230e+01
1.01156340e+01   1.01877680e+01   1.00771640e+01   9.94258300e+00
1.01228480e+01   1.00226400e+01   1.03037610e+01   1.01374190e+01
1.03934040e+01   1.02223120e+01   9.91568800e+00   1.00569950e+01
1.00406810e+01   9.96628000e+00   9.95176400e+00   1.02743280e+01
1.03284240e+01   1.00261550e+01   1.02350400e+01   9.62347500e+00
7.97721500e+00   6.98834500e+00   6.54083700e+00   5.59419300e+00
5.44109600e+00   5.18832000e+00   5.07447900e+00   4.82216500e+00
5.14443900e+00   5.07041500e+00   5.12356600e+00   4.86419400e+00
4.93091800e+00   4.73329300e+00   5.19877800e+00   5.07006600e+00
5.02329300e+00   4.94752100e+00   5.08953600e+00   5.06611700e+00
5.00972200e+00   5.03730200e+00   4.93890900e+00   4.98747800e+00
4.92193600e+00   5.37086000e+00   4.69805300e+00   5.02045900e+00
5.07409300e+00   4.94737800e+00   5.01768700e+00   4.89215900e+00
4.91796700e+00   4.98060300e+00   4.89192100e+00   4.94804300e+00
4.83130500e+00   4.98217200e+00   4.95033600e+00   5.00201600e+00
5.02830800e+00   5.08981000e+00   4.76257000e+00   4.86429500e+00
4.64401200e+00   4.83474300e+00   4.92021900e+00   4.87757000e+00
4.86761000e+00   4.85844700e+00   4.83728900e+00   4.74187300e+00
4.66529000e+00   4.82284800e+00   4.71564600e+00   4.71299600e+00
5.22222600e+00   4.87288500e+00   4.93599900e+00   5.15918100e+00
4.81741600e+00   5.05354700e+00   4.91554200e+00   4.97029600e+00
4.90260000e+00   4.86965600e+00   4.70653400e+00   4.88988400e+00
4.83676100e+00   4.66035100e+00   4.70221100e+00   4.83428200e+00
4.78062500e+00   4.85336800e+00   4.69923700e+00   4.82042900e+00
4.77278600e+00   4.85703000e+00   4.92349300e+00   4.97539500e+00
4.66653900e+00   4.79438100e+00   4.05199500e+00   4.01709300e+00
4.28989800e+00   3.99912900e+00   3.97699200e+00   4.27547500e+00
4.15868000e+00   4.13992000e+00   4.11040000e+00   4.12968500e+00
3.88466100e+00   3.87837800e+00   4.45199600e+00   3.97069900e+00
4.07768100e+00   4.34960200e+00   4.05255100e+00   4.13006600e+00
4.20696700e+00   4.11243100e+00   4.01630000e+00   4.01754900e+00
4.10431500e+00   3.91450600e+00   4.21277800e+00   3.96927900e+00
4.09596500e+00   4.50494600e+00   4.22938300e+00   4.30338000e+00
4.18615500e+00   4.12275400e+00   4.04061600e+00   4.15334000e+00
4.06964500e+00   3.94753000e+00   3.97536300e+00   4.24165000e+00
3.98226700e+00   4.29778300e+00   4.22502600e+00   4.26802800e+00
4.32224600e+00   3.84938100e+00   4.08480200e+00   3.75990800e+00
4.18492200e+00   4.01363700e+00   4.01796300e+00   4.07649600e+00
4.00820700e+00   4.11053300e+00   3.87055100e+00   4.21097700e+00
4.15524400e+00   4.14812500e+00   4.13236500e+00   4.07726200e+00
3.76739800e+00   3.94160800e+00   3.81505400e+00   3.78352000e+00
3.86908200e+00   4.05378300e+00   4.31671500e+00   4.31096900e+00
4.08509900e+00   3.98346500e+00   4.15286100e+00   3.62410400e+00
3.32268500e+00   2.31938000e+00   1.88496600e+00   1.53918800e+00
1.38159400e+00   1.08586400e+00   1.02829900e+00   9.62478000e-01
1.03807300e+00   1.08465700e+00   1.06060300e+00   1.10126200e+00
8.28574000e-01   9.15849000e-01   1.04531400e+00   7.06345000e-01
9.24180000e-01   8.11576000e-01   9.22431000e-01   1.06463300e+00
1.07769300e+00   8.86140000e-01   8.91486000e-01   7.12601000e-01
7.50398000e-01   1.23665800e+00   8.17675000e-01   9.28867000e-01
1.04068000e+00   1.07396100e+00   6.77256000e-01   9.48032000e-01
1.19655800e+00   9.49906000e-01   1.05095600e+00   8.95500000e-01
9.54073000e-01   1.03294700e+00   9.47867000e-01   8.54049000e-01
8.56902000e-01   1.12824500e+00   9.39495000e-01   8.48964000e-01
1.07529300e+00   9.08451000e-01   8.41853000e-01   1.02797300e+00
7.49010000e-01   7.87141000e-01   7.73506000e-01   8.72573000e-01
6.13669000e-01   9.56504000e-01   9.12995000e-01   8.45595000e-01
1.12688400e+00   9.75989000e-01   1.24252300e+00   1.07969800e+00
9.73997000e-01   9.00494000e-01   1.01318800e+00   9.78460000e-01
8.94072000e-01   9.75827000e-01   1.06745400e+00   8.62771000e-01
8.10779000e-01   1.13640000e+00   1.04607500e+00   1.06464800e+00
1.05792800e+00   8.43800000e-01   7.44144000e-01   1.05855100e+00
1.01307500e+00   9.57641000e-01   1.00375700e+00   1.02454600e+00
2.90891000e-01   6.64140000e-02   1.05532000e-01   2.19837000e-01
1.66220000e-02   1.38264000e-01   3.69454000e-01   2.45617000e-01
4.79750000e-02   1.15673000e-01   2.39620000e-01  -6.02350000e-02
2.03631000e-01  -4.06370000e-02   2.96096000e-01   7.09180000e-02
-1.48026000e-01   2.34339000e-01   1.16457000e-01   5.01100000e-02
1.17650000e-01   1.99601000e-01   5.85800000e-03  -6.15620000e-02
-2.64468000e-01   2.79645000e-01   3.86220000e-02   4.73830000e-02
3.71340000e-02   1.15296000e-01   2.40179000e-01   1.63250000e-02
1.51336000e-01   1.13677000e-01   1.42556000e-01   2.41298000e-01
1.30385000e-01   8.48750000e-02   1.59172000e-01   1.71280000e-02
-5.85770000e-02   1.35253000e-01   5.58280000e-02  -4.02310000e-02
7.95880000e-02   6.91060000e-02   3.91030000e-02  -6.27100000e-03
1.84503000e-01   9.53810000e-02   1.53314000e-01   1.08753000e-01
3.14292000e-01   8.03350000e-02   1.11857000e-01   1.48813000e-01
-1.79700000e-03   1.52151000e-01  -5.78250000e-02  -1.23120000e-01
1.84140000e-02   5.37010000e-02   2.08872000e-01   1.80160000e-02
2.40175000e-01   3.48981000e-01   1.06070000e-02   3.37341000e-01
-3.81840000e-02   1.16279000e-01   2.05508000e-01  -9.65380000e-02
1.32069000e-01  -8.47600000e-03   1.84650000e-01   8.12810000e-02
-2.67500000e-02              nan   1.00000000e+01   5.00000000e+00
4.00000000e+00   1.00000000e+00   0.00000000e+00              nan
-7.00000000e-03   9.92500000e-01


10.206335  10.102923  10.148355  10.132251  10.165206  10.166675
10.032804  10.103769  10.159484  10.191772


nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan
nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan

2

当我试图提取该信息时,我不确定为什么datetime显示为nan。请帮我理解我做错了什么?为什么我看到南。

下面的

是截断数据

2014/9/30 14:13 10.206335

2014/9/30 14:13 10.102923

2014/9/30 14:13 10.148355

2014/9/30 14:13 10.132251

2014/9/30 14:13 10.165206

2014/9/30 14:13 10.166675

2014/9/30 14:13 10.032804

from __future__ import division # avoids problems with integer division
import numpy as np #many numerical routines , like vector, matrix multiplication, FFT
import pylab as p
import scipy as sp
import matplotlib.pyplot as plt
import datetime as dt


data = sp.genfromtxt("C:\\users\mshah\\desktop\\SN 32014-01 manual Stepdown 10 5 4 1 0 Mode 1.TXT", delimiter = "\t")
#print(data[10,1])
print(data.shape)
print(data[:,1])
x = data [:,0]
y = data [:,1]

#z = dt.datetime.strftime(x,"%Y/%m/%d %H:%M")


print(y[:10])
print(x)

nansum = sp.sum(sp.isnan(y))
print nansum
x = x[~sp.isnan(y)]
y = y[~sp.isnan(y)]
plt. scatter(x,y)
plt.title("Step Test Process")
plt.xlabel("time")
plt.ylabel("PPMV")
plt.autoscale(tight=True)
plt.grid()
plt.show()

2 个答案:

答案 0 :(得分:0)

使用pandas绘制第一列为日期的前两个制表符分隔列:

from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('input.txt',
        sep='\t', parse_dates=[0], header=None, index_col=0, usecols=[0,1],
        date_parser=lambda s: datetime.strptime(s, '%m/%d/%Y %H:%M %S.%f'))

df.plot()
plt.show()

答案 1 :(得分:0)

尝试在导入语句后添加:

from matplotlib.dates import date2num, MinuteLocator, DateFormatter

def datetime_converter(date_string):
    return date2num(dt.datetime.strptime(date_string, '%m/%d/%Y %H:%M'))

然后修改对genfromtxt的调用以使用'converter'参数,

data = sp.genfromtxt("your_data_file.txt",
                     delimiter = "\t",
                     converters={0: datetime_converter}
                     )

此处的一个问题是此网页中提供的数据由空格而非制表符分隔。只要日期和时间列由空格分隔并且数据(第三列)由选项卡分隔(您使用制表符分隔符,因此我假设您的数据文件在某处有选项卡),这将起作用。


如果日期和时间列由与其他列相同的分隔符分隔,则可以单独解析它们并在事后合并它们,例如:

def date_converter(date_string):
    return date2num(dt.datetime.strptime(date_string, '%m/%d/%Y'))

def time_converter(time_string):
    h,m = time_string.split(':')
    return (int(h) + int(m) / 60.) / 24

data = sp.genfromtxt("txtfile.txt",
                     delimiter = " ",
                     converters={0: date_converter,
                                 1: time_converter}
                     )

x = data[:,0] + data[:,1]
y = data[:,2]

使用matplotlib数字日期

进行绘图

ax.scatter调用之前,创建一个可以使用的轴对象,

ax = plt.axes()
ax.scatter(x,y)

然后在脚本结束时,您可以使用DateLocatorDateFormatter对象格式化此轴的x轴(参见上面的import dates...语句),

ax.xaxis.set_major_locator(MinuteLocator())
ax.xaxis.set_major_formatter(DateFormatter('%H:%M'))

我在这里使用了MinuteLocator,但dates has several more tickers that can be used

希望这更有帮助。