0

データロガーから日付スタンプを読み取り、これらの日付をプロットで使用しようとしています。私はmatplotlibの日付date2num、datestr2num、およびdatetimeで遊んでいますが、フォーマットエラーが発生し続け、これを行うための正しい構文とキーワード(およびそれらの意味)を見つけるのに苦労しています。私は運が悪かったので、matplotlib のヘルプを読んでいます。この情報を読むための助けやより良い方法があれば、フィードバックをお待ちしています.

import numpy as n
import matplotlib.pyplot as p
import matplotlib.dates as d
import datetime as dt


fileobj=open("filename",'r')
data=fileobj.readlines()
fileobj.close()
time=n.empty(len(data))
for i in range(len(data)):
  strings=data[i].split(',')
  if i >5:
    some_time_dt = dt.datetime.strptime(str(strings[0]), '%Y-%m-%d %H:%M:%S')
    time = d.date2num(some_time_dt)

サンプルデータ:

"2013-02-28 16:53:30",1588,11.85,24.35,22.93,24.1,25.05,22.06,22.2,30.94,21.99,22.7,21.91,22‌​.02,21.79 ,21.72 
"2013-02-28 16:53:31",1589,11.85,24.35,23,24.12,25.05,22.09,22.25,31.19,21.97,22.71,21.91,22‌​.02,21.78 ,21.72
"2013-02-28 16:53:32",1590,11.85,24.35,22.98,24.12,25.05,22.12,22.3,31.35,21.98,22.68,21.9,2‌​2.01,21.7 4,21.69 
"2013-02-28 16:53:33",1591,11.85,24.35,22.95,24.14,25.06,22.15,22.33,31.49,21.96,22.67,21.87‌​,22,21.73 ,21.66

2013 年 3 月 20 日 これをプロットすることができましたが、時刻が UTC ではなく PST であるため、印刷される UTC ラベルを取り除く方法を知る必要があります。タイムゾーンをまったく表示しないことをお勧めします。

4

4 に答える 4

2

簡単な解決策は、ファイルを 2 回解析することです。1 回は日付用、もう 1 回はデータ用です。

import numpy as np
import datetime as dt

D = np.loadtxt("filename",delimiter=",",usecols=[0],dtype="str")
Z = np.loadtxt("filename",delimiter=",",usecols=range(1,10))

DATES = [dt.datetime.strptime(d,'"%Y-%m-%d %H:%M:%S"') for d in D]

引数を使用しconvertersてラムダ関数を渡してloadtxt()、文字列から日時オブジェクトへの変換を行うこともできます。コードの行を節約するわけではありません。ちょっとした多様性に注目しているだけです。

datey = lambda x: dt.datetime.strptime(x,'"%Y-%m-%d %H:%M:%S"')

D = np.loadtxt("filename",delimiter=",",usecols=[0],
               dtype=dt.datetime,converters={0:datey})
Z = np.loadtxt("filename",delimiter=",",usecols=range(1,10))
于 2013-03-15T21:43:46.857 に答える
0

日付の解析でエラーが発生しているようです。使用している日付フォーマット文字列に問題がある可能性があります。

日時の解析に使用できるすべてのオプションの表がここにあります:http: //docs.python.org/2/library/datetime.html#strftime-strptime-behavior

于 2013-03-15T18:54:57.333 に答える
0

私は通常、パンダでこの種のことを行います (上記の私のコメントを参照) が、ここでは Python の組み込み CSV モジュールを使用した大まかな解決策を示します。

import csv
import datetime
data = []
for row in csv.reader(open('file.txt')):
    row[0] = datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S') # Parse date.
    row[1:] = map(float, row[1:]) # Convert data from strings to floats.
    data.append(row)

より洗練された方法もありますが、簡単な方法です。

上記のデータでこれを実行すると、

[[datetime.datetime(2013, 2, 28, 16, 53, 30), 1588.0, 11.85...], ...]
于 2013-03-15T19:20:17.697 に答える