python更改字符串到目前为止

时间:2014-08-27 23:38:36

标签: python pandas string-formatting date-formatting

我在数据框中有2个日期列(开始和结束),其中日期采用以下字符串格式'%Y-%m-%d%H:%M:%S.%f'。如何在python中将这些更改为日期格式?我还想创建一个新列,显示结束日期和开始日期之间的天数差异。

提前致谢!

2 个答案:

答案 0 :(得分:4)

如果您使用的是最新版本的pandas,则可以将格式参数传递给to_datetime

In [11]: dates = ["2014-08-27 19:53:06.000", "2014-08-27 19:53:15.002"]

In [12]: pd.to_datetime(dates, format='%Y-%m-%d %H:%M:%S.%f')
Out[12]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-08-27 19:53:06, 2014-08-27 19:53:15.002000]
Length: 2, Freq: None, Timezone: None

注意:在这种情况下,没有必要传递格式,但它可能更快/更紧:

In [13]: pd.to_datetime(dates,)
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-08-27 19:53:06, 2014-08-27 19:53:15.002000]
Length: 2, Freq: None, Timezone: None

答案 1 :(得分:0)

datetime模块包含了日期所需的一切。请注意,在您描述的%Y-%m-%d %H:%M:%S.%f格式中,%f未显示在known directives中,并且未包含在我的回答中

from datetime import datetime
dates = ["2014-08-27 19:53:06", "2014-08-27 19:53:15"]
# That's where the conversion happens from string to datetime objects
datetimes = [datetime.strptime(date, "%Y-%m-%d %H:%M:%S") for date in dates]
print datetimes
>> [datetime.datetime(2014, 8, 27, 19, 53, 6), datetime.datetime(2014, 8, 27, 19, 53, 15)
# Here a simple subtraction will give you the result you are looking for return a timedelta object
delta = datetimes[1] - datetimes[0]
print type(delta), delta
>> <type 'datetime.timedelta'>, 0:00:09