Преобразовать столбец времени в pandas из числа с плавающей запятой в фактическое значение времени - PullRequest
1 голос
/ 22 марта 2020

ЗАДАЧА № 1 (ЛЕГКО) Я хотел преобразовать временной столбец моего информационного кадра в фактическое значение времени, например, «12:01:45» чч: мм: сс

Пытался: df_new["time_1"] = pd.to_datetime(df_new.TIME) Это дал мне новую строку - но он показывает значение даты, а не время. : (

тогда я попытался df_new['Time_1'] = pd.to_datetime(df_new['TIME'], format='%H%M').dt.time Но вывод: ValueError: данные времени '0' не соответствуют формату '% H% M' (совпадение)

ожидается >> время_1 в чч : мм: сс

пример данных:

    PRIMARY_KEY     DATE    TIME        LATITUDE    LONGITUDE   ALTITUDE    DATE_1  time_1
0   b04acedfaa0a    43900   0.499964    43.738003   -79.815340  221.0   2020-03-10  1970-01-01
1   efc27d128dac    43900   0.500140    43.736450   -79.813030  221.0   2020-03-10  1970-01-01
2   19b344a8ef88    43900   0.500293    43.730568   -79.821304  216.0   2020-03-10  1970-01-01
3   0c67c3eefb73    43900   0.500431    43.742660   -79.831710  235.0   2020-03-10  1970-01-01

ЗАДАЧА № 2 (СЛОЖНО и сложно) После преобразования в фактическое время я хочу выполнить какое-то действие.

Вводом будет значение первичного ключа (скажем, 19b344a8ef88)

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

a) на расстоянии около 50 метров (используя LAT & ДОЛГО) и

б) Примерно в одно и то же время, скажем, 10 минут разницы во времени

Ожидаемый результат в виде:

Primary Key     Instances
b04acedfaa0a.   5
efc27d128dac.   3

означает общее 5 раз первичный ключ b04acedfaa0a был рядом с 50 mtrs и в то же время с 19b344a8ef88.

Надеюсь, я смогу объяснить себя ...........

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Для вашего первого вопроса, быстрое решение состоит в том, чтобы отформатировать ваши данные в CSV, прежде чем импортировать. Перед загрузкой вашего CSV в python, вы можете попробовать изменить столбец «ДАТА» на «Короткая дата» и столбец «ВРЕМЯ» на «Время» в Excel и сохранить CSV (переименуйте его, чтобы не перезаписывать исходный файл), а затем попробуйте импортировать в python?

Вероятно, есть умный способ сделать это в python.

По второму вопросу вы можете получить то, что вам нужно, если вы выполните следующие действия:

  1. Соедините кадры данных, используя «Первичный ключ», используя pd.merge()
  2. Отфильтруйте объединенный набор данных, чтобы удовлетворить ваши дополнительные условия, используя df.query() (т. Е. Около 50 метров расстояния и максимум 10 минут разницы во времени)
  3. Получите счетчики каждого первичного ключа для получения ваших экземпляров, используя df['Primary key'].value_counts()
1 голос
/ 22 марта 2020

Когда вы даете to_datetime() обычное старое целое или значение с плавающей запятой, оно увидит это значение как количество секунд, прошедшее с "эпохи UNIX" или 1 января 1970 года. Вот почему значения в time_1 все 1970-01-01. Вы можете прочитать больше об этом здесь , если вам интересно.

Чтобы решить вашу проблему, похоже, есть две вещи, которые вам нужно решить.

Во-первых, убедитесь, что значение, которое вы храните в ВРЕМЯ , является правильным временем эпохи Unix, или найдите другой способ сохранить время.

Как только это сработает, вы сохраните отметку времени в time_1 , чтобы вы могли получить ее часть времени, используя что-то вроде df_new["time_1"].dt.time, что должно дать вам что-то в форме "чч: мм: сс». Вы можете сохранить эти значения в другом столбце.

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