【问题标题】:Python reads time stamp of datafile as NANPython将数据文件的时间戳读取为NAN
【发布时间】:2014-10-24 21:52:52
【问题描述】:

我有一个文件,其中有 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。请帮助我理解我做错了什么?为什么我看到的是 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()

【问题讨论】:

  • 如果您分享了一些文件内容可能会有所帮助
  • @PadraicCunningham。我添加了细节。当我运行 print(data[:1]) 时,日期和时间戳被读取为 nan。我不知道如何与您分享我的完整文件,但我可以。

标签: python datetime matplotlib


【解决方案1】:

尝试在你的导入语句之后添加这个:

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 的调用以使用“转换器”参数,

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 对象格式化此轴的 xaxis(请参阅上面的 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

希望这更有帮助。

【讨论】:

  • 在日期时间之间以空格作为分隔符,但在日期时间和读取制表符之间。我可以做些什么来使用 2 分隔符来阅读?
  • 如果是这样,那么我认为我的答案的前半部分应该适合你(我编辑是因为我对转换器的命名不一致)。
  • 我发现数据的类型不是字符串它的numpy.float64。有没有办法将其转换为数据格式?
  • 是的,这是一个 numpy.float64,我使用的是MatPlotLib's numeric date format。我假设您的意思是日期格式?如果是这样,你想要什么日期格式?如果您要使用 MPL 绘图,您可能需要这些数字日期。我更新了我的答案,向您展示如何使用日期记录器和格式化程序。
  • 如果你想回到日期时间对象,你可以做x = num2date(x)
【解决方案2】:

要绘制前两个制表符分隔的列,其中第一列是日期,使用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()

【讨论】:

  • 感谢您的意见。但是,我发现以下错误。我不知道出了什么问题,但它似乎与 parser.py 有问题。
  • date_parser=lambda s: dt.strptime(s, '%m/%d/%Y %H:%M')) 文件 "C:\Users\mshah\AppData\Local\Continuum \Anaconda\lib\site-packages\pandas\io\parsers.py”,第 420 行,在 parser_f 返回 _read(filepath_or_buffer, kwds) 文件“C:\Users\mshah\AppData\Local\Continuum\Anaconda\lib\site -packages\pandas\io\parsers.py",第 225 行,在 _read 中返回 parser.read()
  • @malayshah:不要将回溯放在 cmets 中,而是更新您的问题(尝试创建一个仍然会导致错误的最小 input.txt 并将其逐字添加到问题中)。我已经使用'9/30/2014 14:13 10.032804\t1\t...' 之类的行测试了代码——它可以工作。
猜你喜欢
  • 2016-07-19
  • 2022-01-11
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
相关资源
最近更新 更多