提问者:小点点

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


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

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


共3个答案

匿名用户

这里的问题是,到_datetime的转换失败,因此数据类型保持为str/object,如果设置了paramerrors='concurve',那么如果任何特定字符串的转换失败,那么这些行将设置为NaT

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

因此,您需要找出这些特定行值的问题所在。

见文件

匿名用户

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

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

匿名用户

这里的问题是“Date”的数据类型仍然是str/object。使用read\u 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或name列表或list或dict列表,默认为False

行为如下:

  • 布尔型。如果是真的-

如果列或索引不能表示为datetimes数组,例如由于不可解析的值或时区的混合,则该列或索引将作为对象数据类型原封不动地返回。对于非标准日期时间解析,请使用pd。到日期时间pd之后。读取\u csv。若要解析混合时区的索引或列,请将date\u parser指定为部分应用的parser。使用utc=True发送到\u datetime()。有关更多信息,请参见解析带有混合时区的CSV。

注意:iso8601格式的日期存在快速路径。

这个问题的相关案例是“int或name列表”。

COL是日期的列索引,它被解析为单独的日期列。