Python AttributeError:只能对datetimelike值使用.dt访问器
您好,我正在使用pandas将列转换为月份。 当我读取数据时,它们是对象:Python AttributeError:只能对datetimelike值使用.dt访问器,python,pandas,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'] = p
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
你有什么想法吗?
多谢各位 这里的问题是
到_datetime
的转换失败,因此数据类型保持为str/object
,如果您设置paramerrors='concurve'
,那么如果任何特定字符串的转换失败,那么这些行将设置为NaT
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
因此,您需要找出这些特定行值的错误
请参见此处您的问题是“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:bool或int或name列表或list或dict列表,默认为False
行为如下:
- 布尔型。如果为True->尝试解析索引
- int或name的列表。e、 g.如果[1,2,3]->尝试将列1,2,3解析为单独的日期列
- 清单清单。e、 g.如果[[1,3]]->将第1列和第3列合并并解析为单个日期列
- dict,例如,{'foo':[1,3]}->将第1,3列解析为日期并调用结果'foo'
pd.read\u csv
之后使用pd.to\u datetime
。若要解析混合时区的索引或列,请将date\u parser
指定为部分应用的pandates.To\u datetime()
和utc=True
。有关更多信息,请参见解析带有混合时区的CSV
注意:iso8601格式的日期存在快速路径
这个问题的相关案例是“int或name列表”
col是“Date”的列索引,它解析为一个单独的日期列。当您编写
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
df['Date'] = df['Date'].dt.strftime('%m/%d')
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 %H:%M:%S')
对于您的案例,可以将基本格式设置为
df['Date'] = pd.to_datetime(df.Date, format='%Y-%m-%d')
之后,您可以按如下方式设置/更改所需的输出:
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')