2017-08-12 109 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的。