嗨,我正在使用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
你有什么想法吗?非常感谢!
7条答案
按热度按时间cuxqih211#
这里的问题是
to_datetime
静默失败,因此dtype保持为str/object
,如果设置参数errors='coerce'
,则如果任何特定字符串的转换失败,则这些行将设置为NaT
。因此,您需要找出这些特定行值的问题所在。
参见docs
bjp0bcyl2#
首先,您需要定义日期列的格式。
对于您的案例库格式可以设置为;
之后,您可以设置/更改所需的输出,如下所示:
rlcwz9us3#
此处的问题是"Date"的数据类型仍为str/object。在使用
read_csv
时,可以使用parse_dates
参数从the documentation for the
parse_dates
parameter开始其行为如下所示:
如果列或索引无法表示为日期时间数组(例如,由于不可分析的值或混合时区),则列或索引将作为对象数据类型返回,而不做任何更改。对于非标准日期时间分析,请在
pd.read_csv
之后使用pd.to_datetime
。要分析混合时区的索引或列,请执行以下操作:将date_parser
指定为部分应用的pandas.to_datetime()
,utc=True
。有关详细信息,请参阅解析混合时区的CSV。注意:iso8601格式的日期有一个快速路径。
这个问题的相关案例是"int或名称列表"。
col是"Date"的列索引,它解析为单独的日期列。
eblbsuwk4#
将日期转换为正确的格式,以便轻松执行日期时间操作
zsohkypk5#
第一个月
zrfyljdw6#
我在尝试使用
pd.Series.dt.floor
时遇到了类似的问题,尽管我的pd.Series
中的所有元素都是datetime.datetime
示例(绝对没有NA),我怀疑这与具有不同时区的tz感知示例有关。为了利用
pd.Timestamp.floor
方法,我的解决方法是定义以下函数:我只会使用
pd.Series.apply
通过函数获取Series的每个元素。最后,当您使用
.dt
访问器时,您将使用的函数是基类的方法,因此使用apply
和一个像我这样的简短自定义函数可能会解决您的问题!fbcarpbf7#
当你写作的时候
可以修好的