У меня есть импортированный CSV-файл, который имеет несколько столбцов с датами в формате «5 января 2001 10:20». (Обратите внимание, не заполненный нулями день)

Если я сделаю df.dtype, тогда столбцы будут отображаться как объекты, а не как строка или дата и время. Мне нужно иметь возможность вычитать 2 значения столбца, чтобы определить разницу, поэтому я пытаюсь привести их в состояние, в котором я могу это сделать.

В настоящий момент, если я попытаюсь вычесть тест в конце, я получаю ошибку unsupported operand type(s) for -: 'str' and 'str'.

Я пробовал несколько методов, но столкнулся с проблемой каждый раз, когда я пытался. Любая помощь будет оценена. Если мне нужно будет дать больше информации, я сделаю это.

0
M.Throw 11 Дек 2016 в 20:18

3 ответа

Лучший ответ

Я обнаружил, что проблема была в пропущенных значениях в столбце. Использование coerce=True, поэтому df["Date"] = pd.to_datetime(df["Date"], coerce=True) решает проблему.

1
M.Throw 11 Дек 2016 в 17:31

Как предлагает @MaxU, вы можете использовать метод pd.to_datetime(), чтобы привести значения данного столбца в «подходящий» формат, например так:

df['datetime'] = pd.to_datetime(df.datetime)

Вам придется делать это с любыми столбцами, которые вам нужны, и преобразовывать их в правильный тип d.

Кроме того, вы можете использовать аргумент parse_dates метода pd.read_csv(), например:

df = pd.read_csv(path, parse_dates=[1,2,3])

Где столбцы 1,2,3 должны содержать данные, которые могут быть интерпретированы как даты.

Надеюсь, это поможет.

3
Thanos 11 Дек 2016 в 17:27

Конвертировать столбец в дату и время, используя этот подход

df["Date"] = pd.to_datetime(df["Date"])

Если столбец имеет пустые значения, измените уровень ошибки на принудительный, чтобы игнорировать ошибки: Детали

df["Date"] = pd.to_datetime(df["Date"], errors='coerce')

После чего вы сможете вычесть две даты.

Пример:

import pandas
df = pandas.DataFrame(columns=['to','fr','ans'])
df.to = [pandas.Timestamp('2014-01-24 13:03:12.050000'), pandas.Timestamp('2014-01-27 11:57:18.240000'), pandas.Timestamp('2014-01-23 10:07:47.660000')]
df.fr = [pandas.Timestamp('2014-01-26 23:41:21.870000'), pandas.Timestamp('2014-01-27 15:38:22.540000'), pandas.Timestamp('2014-01-23 18:50:41.420000')]
(df.fr-df.to).astype('timedelta64[h]')

Обратитесь к этому ответу для более подробной информации:

Рассчитайте разницу во времени между двумя столбцами в часах и минутах Pandas DataFrame

Если вы хотите напрямую загрузить столбец как объект datetime при чтении из csv, рассмотрите этот пример:

Панды читают csv dateint столбцы в datetime

2
Community 23 Май 2017 в 12:13