Округлить и сравнить индексы Python - PullRequest
0 голосов
/ 28 мая 2018

У меня есть несколько CSV-файлов с метками времени Unix, которые я использую в качестве DateTimeIndexes, которые я хотел бы сравнить.

Пример одного файла:

Unixtime           Value     
1525328729150.00   15.06
1525328729943.00   16.05
1525328730741.00   16.32
1525328731536.00   16.35
1525328732335.00   16.87
1525328733131.00   16.99
1525328733932.00   17.45
1525328734731.00   17.65

В настоящее время я используюследующий (фрагмент) для установки DatetimeIndex (работает без нареканий):

data[i] = pd.read_csv(temp_file_name, index_col=' Time_Created')
data[i].index = pd.to_datetime(data[i].index, unit='ns')

Однако есть несколько проблем, когда я хочу сравнить значения двух разных файлов в определенное время:

  1. Время в файлах не совпадает точно.Это может быть 01: 443 секунды в одном файле и 01: 247. в другом.
  2. Округление до секунды или 500 мс вызывает проблемы, когда индексы могут быть пропущены или дублированы.Округление до 500 мс может округлить с 01: 443 до 01: 500, но с 01: 247 до 01: 000.

Я пробовал несколько подходов:

  1. Округление int64целые числа
  2. Округление DatetimeIndex

До сих пор пробовали использовать

np.round(data[i].index.astype(np.int64), -13).astype('datetime64[ns]')

или

pd.DatetimeIndex(((data[i].index.asi8/(1e13*60)).round()*1e13*60)
.astype(np.int64)).values

или

ns1min=1*60*1000000000   # 1 minute in nanoseconds 
pd.to_datetime(((data[i].index.astype(np.int64) // ns1min + 1 ) * ns1min))

или

pandas.DatetimeIndex.round

Но ни один из них, похоже, не работает и не предоставляет мне решение, которое мне нужно, а именно вычитание двух значений (примерно) в одно и то же время.Как лучше всего подойти к этому?

1 Ответ

0 голосов
/ 30 мая 2018

Мне удалось заставить его работать, используя

round_amount = 1*1*1000000000
data[i].index = pd.DatetimeIndex(((data[i].index.asi8/(round_amount)).round()*round_amount).astype(np.int64))

, который округляет DatetimeIndex до ближайшей секунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...