2016-12-11 3 views
0

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

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

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

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

+0

Вы пробовали 'pd.to_datetime()'? – MaxU

ответ

1

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

2

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

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

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

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

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

Calculate Pandas DataFrame Time Difference Between Two Columns in Hours and Minutes

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

Pandas read csv dateint columns to datetime

+0

Это ошибка. Я получаю «локальную переменную», указанную до назначения. Любопытно, что я думаю, что это связано с тем, что у меня отсутствуют значения. Я обнаружил, что линия работает с некоторыми столбцами, но не с теми, у которых есть значения NaN. –

+0

Благодарим вас за помощь. –

+0

рад, что я мог помочь :) @M.Throw –

3

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

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

Вы должны сделать это на то, что колонки у вас есть что вам нужно преобразовать в правый dtype.

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

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

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

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

+0

Благодарим вас за помощь. –