2017-08-12 48 views
0

我想查看一個CSV文件,但我想確保所有數據都在那裏。 CSV時間爲15分鐘,格式爲yyyy-mm-dd-hh:mm。我收集了數據並製作了時間戳。 LST =列表()在Timesstamp中查找缺少的數據

with open("CHFJPY15.csv", "r") as f: 
    f_r = f.read() 

    sline = f_r.split() 

    for line in sline: 
     parts = line.split(',') 
     date = parts[0] 
     time = parts[1] 
     closeingtime = parts[5] 

     timestamp = date + time + closeingtime 

     lst.append(timestamp) 
print(lst, "liste") 

如下面看到的,CSV是數據的只是一個長列表。我再次想要檢查每15分鐘所有數據是否在那裏。但我不知道如何編寫它。

'2015.12.09.19:45 123.251', '2015.12.09.20:00 123.188', '2015.12.09.20:15123.192', '2015.12.09.20:30 123.242', '2015.12.09.20:45123.166' , ..等。

+0

你能解釋時間戳的格式嗎? – Gribouillis

回答

2

你可能沒有注意到,在數據列表項的格式不一致。例如,在日期和2015.12.09.19:45 123.251中的其他數據之間存在空格,但空格在2015.12.09.20: 45123.166中的位置不同。我會假設你會處理這個問題。

我首先創建一個類似於你的數據項的格式一致的列表。儘管大多數日期間隔十五分鐘,但我故意留下一些空白。

>>> from datetime import timedelta 
>>> interval = timedelta(minutes=15) 
>>> from datetime import datetime 
>>> current_time = datetime(2015,12,9,19,30) 
>>> data = [] 
>>> omits = [3,5,9,11,17] 
>>> for i in range(20): 
...  current_time += interval 
...  if i in omits: 
...   continue 
...  data.append(current_time.strftime('%y.%m.%d.%H:%M')+' 123.456') 
...  
>>> data 
['15.12.09.19:45 123.456', '15.12.09.20:00 123.456', '15.12.09.20:15 123.456', '15.12.09.20:45 123.456', '15.12.09.21:15 123.456', '15.12.09.21:30 123.456', '15.12.09.21:45 123.456', '15.12.09.22:15 123.456', '15.12.09.22:45 123.456', '15.12.09.23:00 123.456', '15.12.09.23:15 123.456', '15.12.09.23:30 123.456', '15.12.09.23:45 123.456', '15.12.10.00:15 123.456', '15.12.10.00:30 123.456'] 

現在我通讀日期減去每個從它的前輩。我設置了第一個'前任',我將其稱爲previousnow,因爲這必然與其他日期不同。

我將列表中的每個數據分成兩部分,忽略第二部分。使用strptime我將字符串轉換爲日期。可以減去日期並比較差異。

>>> previous = datetime.now().strftime('%y.%m.%d.%H:%M') 
>>> first = True 
>>> for d in data: 
...  date_part, other = d.split(' ') 
...  if datetime.strptime(date_part, '%y.%m.%d.%H:%M') - datetime.strptime(previous, '%y.%m.%d.%H:%M') != interval: 
...   if not first: 
...    'unacceptable gap prior to ', date_part 
...   else: 
...    first = False 
...  previous = date_part 
...  
('unacceptable gap prior to ', '15.12.09.20:45') 
('unacceptable gap prior to ', '15.12.09.21:15') 
('unacceptable gap prior to ', '15.12.09.22:15') 
('unacceptable gap prior to ', '15.12.09.22:45') 
('unacceptable gap prior to ', '15.12.10.00:15') 
1

有一個叫做datetime的Python包可以使用。如果您將之前的輸入時間記錄爲名爲prev的日期時間對象,並創建了一個名爲delt的15分鐘timedelta,則可以輕鬆檢查文件中的下一次(如名爲new_dt的日期時間)是否具有prev + delt == new_dt。如果他們都這樣做,你不會錯過任何時間。在日期時間包這裏

更多信息: https://docs.python.org/3/library/datetime.html

0

我覺得這是不好的做法duplicate你自己的問題,小於24H的第一篇文章之後。此外還包括全新的第一篇文章。 對於新讀者來說感覺很混亂,對於回答你第一個問題的人來說有點不尊重。

這就是說,使用​​您的處理可能會更快。

import pandas as pd 

# Read your data as a pandas Dataframe 
data = pd.read_csv("your_file.csv",     # Path to your file 
        parse_dates=True,     # Automatically parse dates from string 
        infer_datetime_format=True)  # Can speed things up 

# Compute the time deltas 
data['deltas'] = pd.NaT        # Create new column with no values 

for i, r in df.iterrows():       # iterate over lines 
    if not i: 
     continue          # skip first line 
    delta = df.ix[i, 'date'] - df.ix[i - 1, 'date'] # compute time delta 
    df.ix[i, 'deltas'] = delta      # Attribute delta value to table 

# And display any abnormal value 
pd.where(df.deltas != pd.Timedelta('15 min')).dropna() 

請注意,我不知道您的CSV文件的格式,這可能需要額外的操作中要加載爲pd.Dataframe的。