首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新格式化包含Pandas中日期的列

重新格式化包含Pandas中日期的列
EN

Stack Overflow用户
提问于 2014-09-24 00:05:28
回答 1查看 561关注 0票数 0

这里的Python新手从R转到Python进行统计建模和分析。

我正在使用Pandas数据结构,并试图重构包含“date”值的列。在下面的数据中,您会注意到有些值采用“Mar-10”格式,而其他值则采用“12/1/13”格式。我如何在Pandas数据结构中重构包含“日期”(技术上不是日期结构)的列,使它们是统一的(包含相同的结构)。我更希望他们都遵循“三月十号”的格式。有人能帮忙吗?

代码语言:javascript
复制
In [34]: dat["Date"].unique()
Out[34]: 
array(['Jan-10', 'Feb-10', 'Mar-10', 'Apr-10', 'May-10', 'Jun-10',
       'Jul-10', 'Aug-10', 'Sep-10', 'Oct-10', 'Nov-10', 'Dec-10',
       'Jan-11', 'Feb-11', 'Mar-11', 'Apr-11', 'May-11', 'Jun-11',
       'Jul-11', 'Aug-11', 'Sep-11', 'Oct-11', 'Nov-11', 'Dec-11',
       'Jan-12', 'Feb-12', 'Mar-12', 'Apr-12', 'May-12', 'Jun-12',
       'Jul-12', 'Aug-12', 'Sep-12', 'Oct-12', 'Nov-12', 'Dec-12',
       'Jan-13', 'Feb-13', 'Mar-13', 'Apr-13', 'May-13', '6/1/13',
       '7/1/13', '8/1/13', '9/1/13', '10/1/13', '11/1/13', '12/1/13',
       '1/1/14', '2/1/14', '3/1/14', '4/1/14', '5/1/14', '6/1/14',
       '7/1/14', '8/1/14'], dtype=object)

In [35]: isinstance(dat["Date"], basestring)  # not a string?
Out[35]: False

In [36]: type(dat["Date"]).__name__
Out[36]: 'Series'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-24 00:15:13

我想你们的约会已经是字符串了,试着:

代码语言:javascript
复制
import numpy as np
import pandas as pd
date = pd.Series(np.array(['Jan-10', 'Feb-10', 'Mar-10', 'Apr-10', 'May-10', 'Jun-10',
       'Jul-10', 'Aug-10', 'Sep-10', 'Oct-10', 'Nov-10', 'Dec-10',
       'Jan-11', 'Feb-11', 'Mar-11', 'Apr-11', 'May-11', 'Jun-11',
       'Jul-11', 'Aug-11', 'Sep-11', 'Oct-11', 'Nov-11', 'Dec-11',
       'Jan-12', 'Feb-12', 'Mar-12', 'Apr-12', 'May-12', 'Jun-12',
       'Jul-12', 'Aug-12', 'Sep-12', 'Oct-12', 'Nov-12', 'Dec-12',
       'Jan-13', 'Feb-13', 'Mar-13', 'Apr-13', 'May-13', '6/1/13',
       '7/1/13', '8/1/13', '9/1/13', '10/1/13', '11/1/13', '12/1/13',
       '1/1/14', '2/1/14', '3/1/14', '4/1/14', '5/1/14', '6/1/14',
       '7/1/14', '8/1/14'], dtype=object))

date.map(type).value_counts()
# date contains 56 strings
# <type 'str'>    56
# dtype: int64

查看每个单独元素的类型,而不是查看包含在其中的列的类型。

明智地对待它们的最佳选择是将它们转换为熊猫DateTime对象:

代码语言:javascript
复制
pd.to_datetime(date)
Out[18]: 
0    2014-01-10
1    2014-02-10
2    2014-03-10
3    2014-04-10
4    2014-05-10
5    2014-06-10
6    2014-07-10
7    2014-08-10
8    2014-09-10
...

您可能需要在某种程度上处理这些格式,例如为每种格式创建两个单独的数组,然后将它们合并到一起:

代码语言:javascript
复制
# Convert the Aug-10 style strings
pd.to_datetime(date, format='%b-%y', coerce=True)
# Convert the 9/1/13 style strings
pd.to_datetime(date, format='%m/%d/%y', coerce=True)

我永远不会记得这些时间格式化代码从我的头顶,但有一个很好的磨练他们这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26006547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档