我在数据框中有很多列,我必须在名为in_time
和out_time
的两列中找到时间差,并将其放在同一数据框的新列中。< / p>
时间格式如下2015-09-25T01:45:34.372Z
。
我正在使用Pandas DataFrame。
我想这样做:
df.days = df.out_time - df.in_time
我有很多列,我必须在其中增加1个列名为days并将差异放在那里。
答案 0 :(得分:1)
您需要将字符串转换为datetime
dtype,然后您可以减去所需的任意日期以及生成的系列调用dt.days
:
In [15]:
df = pd.DataFrame({'date':['2015-09-25T01:45:34.372Z']})
df
Out[15]:
date
0 2015-09-25T01:45:34.372Z
In [19]:
df['date'] = pd.to_datetime(df['date'])
df['day'] = (df['date'] - dt.datetime.now()).dt.days
df
Out[19]:
date day
0 2015-09-25 01:45:34.372 -252
答案 1 :(得分:0)
嗯,这完全取决于你使用的时间格式。我建议使用datetime。
如果in_time
和out_time
当前是字符串,请使用datetime.strptime()
转换它们:
from datetime import datetime
f = lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ')
df.in_time = df.in_time.apply(f)
df.out_time = df.out_time.apply(f)
然后您可以简单地减去它们,并将结果分配给名为&#39; days&#39;的新列:
df['days'] = df.out_time - df.in_time
示例:(3秒和1天的差异)
In[5]: df = pd.DataFrame({'in_time':['2015-09-25T01:45:34.372Z','2015-09-25T01:45:34.372Z'],
'out_time':['2015-09-25T01:45:37.372Z','2015-09-26T01:45:34.372Z']})
In[6]: df
Out[6]:
in_time out_time
0 2015-09-25T01:45:34.372Z 2015-09-25T01:45:37.372Z
1 2015-09-25T01:45:34.372Z 2015-09-26T01:45:34.372Z
In[7]: type(df.loc[0,'in_time'])
Out[7]: str
In[8]: df.in_time = df.in_time.apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ'))
In[9]: df.out_time = df.out_time.apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%fZ'))
In[10]: df # notice that it looks exactly the same, but the type is different
Out[10]:
in_time out_time
0 2015-09-25 01:45:34.372 2015-09-25T01:45:37.372Z
1 2015-09-25 01:45:34.372 2015-09-26T01:45:34.372Z
In[11]: type(df.loc[0,'in_time'])
Out[11]: pandas.tslib.Timestamp
创建新专栏:
In[12]: df['days'] = df.out_time - df.in_time
In[13]: df
Out[13]:
in_time out_time days
0 2015-09-25 01:45:34.372 2015-09-25 01:45:37.372 0 days 00:00:03
1 2015-09-25 01:45:34.372 2015-09-26 01:45:34.372 1 days 00:00:00
现在您可以使用输出格式了。例如,秒差的部分:
In[14]: df.days = df.days.apply(lambda x: x.total_seconds()/60)
In[15]: df
Out[15]:
in_time out_time days
0 2015-09-25 01:45:34.372 2015-09-25 01:45:37.372 0.05
1 2015-09-25 01:45:34.372 2015-09-26 01:45:34.372 1440.00
注意:关于in_time
和out_time
格式,请注意我做了一些假设(例如,您使用24小时时钟(因此使用) %H
而非%I
))。要使用该格式,请查看:strptime()
documentation。
注2:如果您可以将程序设计为从头开始使用datetime
(而不是使用字符串并转换它们),那显然会更好。