【问题标题】: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

【问题讨论】:

    标签: python datetime pandas


    【解决方案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 所建议)
      猜你喜欢
      • 2017-11-28
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      相关资源
      最近更新 更多