AttributeError: может использовать только .dt accessor с datetimelike значениями
Привет, я использую pandas для преобразования столбца в месяц.
Когда я читаю свои данные, они являются объектами:
Date object
dtype: object
Поэтому я сначала делаю их на дату, а затем пытаюсь сделать их месяцами:
import pandas as pd
file = '/pathtocsv.csv'
df = pd.read_csv(file, sep = ',', encoding='utf-8-sig', usecols= ['Date', 'ids'])
df['Date'] = pd.to_datetime(df['Date'])
df['Month'] = df['Date'].dt.month
Также, если это помогает:
In [10]: df['Date'].dtype
Out[10]: dtype('O')
Итак, ошибка, которую я получаю, выглядит так:
/Library/Frameworks/Python.framework/Versions/2.7/bin/User/lib/python2.7/site-packages/pandas/core/series.pyc in _make_dt_accessor(self)
2526 return maybe_to_datetimelike(self)
2527 except Exception:
-> 2528 raise AttributeError("Can only use .dt accessor with datetimelike "
2529 "values")
2530
AttributeError: Can only use .dt accessor with datetimelike values
EDITED:
Столбцы даты выглядят следующим образом:
0 2014-01-01
1 2014-01-01
2 2014-01-01
3 2014-01-01
4 2014-01-03
5 2014-01-03
6 2014-01-03
7 2014-01-07
8 2014-01-08
9 2014-01-09
Есть ли у вас идеи?
Большое спасибо!
Ответы
Ответ 1
Ваша проблема здесь в том, что to_datetime
молча провалился, поэтому dtype остался как str/object
, если вы установите param errors='coerce'
, то если преобразование не удастся для какой-либо конкретной строки, тогда эти строки будут установлены в NaT
.
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
Так что вам нужно выяснить, что не так с этими конкретными значениями строк.
Смотрите документы
Ответ 2
Ваша проблема здесь в том, что dtype "Date" остался как str/object. Вы можете использовать параметр parse_dates
при использовании read_csv
import pandas as pd
file = '/pathtocsv.csv'
df = pd.read_csv(file, sep = ',', parse_dates= [col],encoding='utf-8-sig', usecols= ['Date', 'ids'],)
df['Month'] = df['Date'].dt.month
Из документации по параметру parse_dates
parse_dates: bool или список int или имен или список списков или dict, по умолчанию False
Поведение выглядит следующим образом:
- логическое значение. Если True → попробуйте выполнить синтаксический анализ индекса.
- список int или имен. например Если [1, 2, 3] ->, попробуйте проанализировать столбцы 1, 2, 3, каждый как отдельный столбец даты.
- список списков. например Если [[1, 3]] → объединить столбцы 1 и 3 и проанализировать как один столбец даты.
- диктовать, например {‘Foo: [1, 3]} → проанализировать столбцы 1, 3 как дату и результат вызова‘ foo
Если столбец или индекс не могут быть представлены в виде массива даты и времени, скажем, из-за неразборчивого значения или комбинации часовых поясов, столбец или индекс будут возвращены без изменений в качестве типа данных объекта. Для нестандартного анализа даты и времени используйте pd.to_datetime
после pd.read_csv
. Чтобы проанализировать индекс или столбец со смесью часовых поясов, укажите, что date_parser
является частично примененным pandas.to_datetime()
с utc=True
. Дополнительную информацию смотрите в разделе Анализ CSV со смешанными часовыми поясами.
Note: A fast-path exists for iso8601-formatted dates.
Соответствующим случаем для этого вопроса является "список целых или имен".
col - это индекс столбцов "Date", который анализируется как отдельный столбец даты.