我通过read_csv
导入了一个 Dataframe ,但由于某种原因,无法从序列df['date']
中提取年份或月份,尝试得到AttributeError: 'Series' object has no attribute 'year'
:
date Count
6/30/2010 525
7/30/2010 136
8/31/2010 125
9/30/2010 84
10/29/2010 4469
df = pd.read_csv('sample_data.csv', parse_dates=True)
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].year
df['month'] = df['date'].month
更新:当我在我的panda 0.14.1版本上尝试使用df['date'].dt
的解决方案时,我得到"AttributeError:'系列'对象没有属性'dt'":
df = pd.read_csv('sample_data.csv',parse_dates=True)
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
对不起,这个问题似乎重复-我希望答案会让我觉得像一个笨蛋...但我还没有任何运气使用的答案类似的问题上so。
跟进:我似乎无法在我的Anaconda环境中更新我的panda 0.14.1到一个更新的版本,下面的每一次尝试都会产生一个无效的语法错误。
conda update pandas
conda install pandas==0.15.2
conda install -f pandas
有什么想法吗?
5条答案
按热度按时间uubf1zoe1#
如果你运行的是最近的panda版本,那么你可以使用datetime访问器
dt
来访问datetime组件:看起来您运行的是旧版本的panda,在这种情况下,可以执行以下操作:
关于为什么它没有将其解析为
read_csv
中的日期时间,您需要传递列([0]
)的序号位置,因为当True
尝试解析列[1,2,3]
时,请参见docs因此,如果您将参数
parse_dates=[0]
传递给read_csv
,则加载后不需要在"date"列上调用to_datetime
。5w9g7ksd2#
这是可行的:
现在:
给出此 Dataframe :
lrpiutwd3#
何时使用
dt
访问器一个常见的混淆来源是何时使用**
.year
,何时使用.dt.year
**。前者是
pd.DatetimeIndex
对象的属性;后者用于pd.Series
对象。考虑以下 Dataframe :序列和索引的定义看起来很相似,但是
pd.DataFrame
构造函数将它们转换为不同的类型:DatetimeIndex
对象具有直接year
属性,而Series
对象必须使用dt
访问器。month
也是如此:值得注意的一个细微但重要的区别是
df.index.month
给出了NumPy数组,而df['Dates'].dt.month
给出了Pandas系列,在上面,我们使用pd.Series.values
来提取NumPy数组表示。qfe3c7zg4#
可能已经来不及回答了,但是由于您已经在加载数据时解析了日期,因此您可以这样做来获得日期
wmvff8tz5#
对我有效的是将Pandas升级到最新版本:
从命令行执行以下操作: