日期时间到熊猫系列中的字符串

Posted

技术标签:

【中文标题】日期时间到熊猫系列中的字符串【英文标题】:datetime to string with series in pandas 【发布时间】:2015-07-19 20:50:46 【问题描述】:

我需要做这个简单的事情:

dates = p.to_datetime(p.Series(['20010101', '20010331']), format = '%Y%m%d')
dates.str

但是我得到一个错误。我应该如何从datetime 转换为string

【问题讨论】:

【参考方案1】:

日期时间没有str 访问器,您也不能使用dates.astype(str),您可以调用apply 并使用datetime.strftime

In [73]:

dates = pd.to_datetime(pd.Series(['20010101', '20010331']), format = '%Y%m%d')
dates.apply(lambda x: x.strftime('%Y-%m-%d'))
Out[73]:
0    2001-01-01
1    2001-03-31
dtype: object

您可以使用任何您喜欢的方式更改日期字符串的格式:strftime() and strptime() Behavior。

更新

0.17.0 版本开始,您可以使用dt.strftime 执行此操作

dates.dt.strftime('%Y-%m-%d')

现在可以工作了

【讨论】:

谢谢@EdChum。但是现在我发现了另一个问题。如果a有NaT。?如何解决? dates = p.to_datetime(p.Series(['20010101', '20010331',None]), format = '%Y%m%d') dates.apply(lambda x: x.strftime('%Y-%m-%d')) 先删除它们是一种选择,所以dates.dropna().apply(lambda x: x.strftime('%Y-%m-%d')) @EdChum 这仍然不会将日期转换为字符串。 type(dates.df.strftime(...))<class 'pandas.core.series.Series'>。您需要添加.tolist()。熊猫版本 0.25.3【参考方案2】:

有一个 pandas 函数可以应用于 pandas 数据框中的 DateTime 索引。

date = dataframe.index #date is the datetime index
date = dates.strftime('%Y-%m-%d') #this will return you a numpy array, element is string.
dstr = date.tolist() #this will make you numpy array into a list

列表内的元素:

u'1910-11-02'

您可能需要替换“u”。

可能有一些额外的参数我应该放入前面的函数中。

【讨论】:

【参考方案3】:

从 17.0 版开始,您可以使用 dt 访问器进行格式化:

dates.dt.strftime('%Y-%m-%d')

Reference

【讨论】:

与在数据框 .apply() 方法中的 lambda 函数内使用 datetime.strftime 相比,这将我的代码速度提高了 10 倍(如 @EdChum 所建议)

以上是关于日期时间到熊猫系列中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期和小时列合并到熊猫系列中的一个索引列中?

如何按 > 日期对一系列日期求和并将它们附加到熊猫新数据框中的新列?

从熊猫框架中的一系列数据中找出值和日期

将熊猫系列时间戳转换为唯一日期列表

加入带有日期范围的熊猫时间序列

从 Python(熊猫)中的日期列获取周开始日期(星期一)?