【问题标题】:Finding missing data in a Timesstamp在时间戳中查找缺失的数据
【发布时间】:2017-08-12 17:51:53
【问题描述】:

我正在尝试查看 CSV 文件,但我想确保所有数据都在那里。 CSV 时间为 15 分钟,格式为 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', ..等等..

【问题讨论】:

  • 能解释一下时间戳的格式吗?

标签: python csv


【解决方案1】:

您可能没有注意到该数据列表中的项目格式不一致。例如,2015.12.09.19:45 123.251 中的日期和其他数据之间有空格,但2015.12.09.20: 45123.166 中的间隔位置不同。我假设你会处理这个问题。

我首先创建一个与您类似的格式一致的数据项列表。虽然大多数日期之间有 15 分钟的间隔,但我特意放置了一些间隔。

>>> 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')

【讨论】:

    【解决方案2】:

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

    有关 datetime 包的更多信息: https://docs.python.org/3/library/datetime.html

    【讨论】:

      【解决方案3】:

      我认为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

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 2020-10-14
        • 2018-05-29
        相关资源
        最近更新 更多