[pandas] 转换DatetimeIndex为一个日期字符串的Series

[pandas] 转换DatetimeIndex为一个日期字符串的Series

dm_vincent 2015-09-24 00:34:49

38889

收藏 9

分类专栏: Python pandas 文章标签: python 数据处理 pandas

版权

遇到的问题:

需要将一个DatetimeIndex转换为一个日期字符串的Series类型。

比如,有一个DatetimeIndex是这样的:

print dtiDatetimeIndex(['2015-09-21 10:30:00', '2015-09-21 11:30:00',               '2015-09-21 14:00:00', '2015-09-21 15:00:00',               '2015-09-22 10:30:00', '2015-09-22 11:30:00',               '2015-09-22 14:00:00', '2015-09-22 15:00:00'],              dtype='datetime64[ns]', freq=None, tz=None)123456

现在只需要这些数据里面的2015-09-21,2015-09-22这样的日期信息,时间信息可以省略。


解决方案:

如果Index的类型是普通的pandas.core.index.Index,那么这个问题好解决:

df.index.str.split(' ').str[0]1

然而当尝试在DatetimeIndex上使用str对象时,会抛出异常:

AttributeError: Can only use .str accessor with string values (i.e. inferred_type is 'string', 'unicode' or 'mixed')12

经过查看API,发现可以先将DatetimeIndex转换为一个类型为datetime的数组,然后对该数组进行操作得到一个numpy.ndarray,最后将这个array转化为Series即可,具体代码如下所示:

pydate_array = dti.to_pydatetime()date_only_array = np.vectorize(lambda s: s.strftime('%Y-%m-%d'))(pydate_array )date_only_series = pd.Series(date_only_array)123

最后得到的结果就是只含有日期的Series:

print date_only_series 0    2015-09-211    2015-09-212    2015-09-213    2015-09-214    2015-09-225    2015-09-226    2015-09-227    2015-09-22dtype: object
(0)

相关推荐