AttributeError:只能使用具有datetimelike值的.dt访问器

时间:2015-10-27 10:10:39

标签: python pandas

您好我正在使用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

已编辑:

日期列如下:

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 

你有什么想法吗? 非常感谢你!

4 个答案:

答案 0 :(得分:40)

你的问题是to_datetime默默地失败所以dtype保持为str/object,如果你设置param errors='coerce'然后如果任何特定字符串的转换失败,那么这些行设置为NaT

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

因此,您需要找出这些特定行值的错误。

请参阅docs

答案 1 :(得分:2)

这里的问题是'Date'的dtype保留为str / object,使用read_csv时可以使用参数'parse_dates'

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

enter image description here

col是“日期”的列索引,它解析为单独的日期列。 (请参阅https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

答案 2 :(得分:1)

首先,您需要定义日期列的格式。

df['Date'] = pd.to_datetime(df.Date, format='%Y-%m-%d %H:%M:%S')

您的案例库格式可以设置为;

df['Date'] = pd.to_datetime(df.Date, format='%Y-%m-%d')

之后,您可以按以下步骤设置/更改所需的输出;

df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')

答案 3 :(得分:-2)

写作时

df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
df['Date'] = df['Date'].dt.strftime('%m/%d')

可以修复