在Timesstamp中查找缺少的数据

时间:2017-08-12 17:51:53

标签: python csv

我试图查看CSV文件,但我想确保所有数据都在那里。 CSV时间为15 Min格式为yyyy-mm-dd-hh:mm。我收集了数据并制作了时间戳。 lst = list()

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',   ..等等。

3 个答案:

答案 0 :(得分: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']

现在我读完了它的前身减去每个日期。我设置了第一个'前身',我将previous称为now,因为它必然会与其他日期不同。

我将列表中的每个数据分成两部分,忽略第二部分。使用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 :(得分:1)

您可以使用名为datetime的Python包。如果您将之前的条目时间跟踪为名为prev的日期时间对象,并创建了一个名为delt的15分钟timedelta,您可以轻松检查文件中的下一次(作为名为new_dt的日期时间)是否具有prev + delt == new_dt。如果他们都这样做,你就不会错过任何时间。

有关datetime包的更多信息,请点击此处: https://docs.python.org/3/library/datetime.html

答案 2 :(得分:0)

我认为duplicate你自己的问题不是好习惯,不到第一篇文章后24小时。此外,还包括对新邮件中第一篇文章的完整答案。 对于新读者来说,这感觉很麻烦,对回答你第一个问题的人有点不尊重。

话虽如此,使用pandas进行处理可能会更快。

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