在这里,我想计算从csv文件导入的时间列中各行之间的时间间隔。在我的csv文件中,它包含日期和时间。在这里,我想显示行之间的时间差。那是我的预期输出。 我的代码是:-
def time_diff(start, end):
start.append(pd.to_datetime(data['time'][0],formt = '%H:%M:%S').time())
end.append(pd.to_datetime(len(data['time']), format='%H:%M:%S').time())
if isinstance(start, datetime_time): # convert to datetime
assert isinstance(end, datetime_time)
start, end = [datetime.combine(datetime.min,i) for t in [start, end]]
if start <= end:
return end - start
else:
end += timedelta(1) # +day
assert end > start
return end - start
for index, row in data.iterrows():
start = [datetime.strptime(t,'%H:%M:%S') for t in inex]
end = [datetime.strptime(t,'%H:%M:%S') for t in index]
print(time_diff(s, e))
assert time_diff(s, e) == time_diff(s.time(), e.time())
我的csv文件是:-
date time
10/3/2018 6:00:00
10/3/2018 7:00:00
10/3/2018 8:00:00
10/3/2018 9:00:00
10/3/2018 10:00:00
10/3/2018 11:00:00
10/3/2018 12:00:00
10/3/2018 13:45:00
10/3/2018 15:00:00
10/3/2018 16:00:00
10/3/2018 17:00:00
10/3/2018 18:00:00
10/3/2018 19:00:00
10/3/2018 20:00:00
10/3/2018 21:30:00
10/4/2018 6:00:00
我的预期输出(时差)为:-
time_diff
0
1
1
1
1
1
1
1:45
1:15
1
1
1
1
1
1:30
8:30
这是我想通过使用此代码显示的输出。但是我不知道如何遍历行以获取两次之间的时间差。我的时差以小时为单位显示。
答案 0 :(得分:2)
IIUC:
from io import StringIO
txtFile = StringIO("""date time
10/3/2018 6:00:00
10/3/2018 7:00:00
10/3/2018 8:00:00
10/3/2018 9:00:00
10/3/2018 10:00:00
10/3/2018 11:00:00
10/3/2018 12:00:00
10/3/2018 13:45:00
10/3/2018 15:00:00
10/3/2018 16:00:00
10/3/2018 17:00:00
10/3/2018 18:00:00
10/3/2018 19:00:00
10/3/2018 20:00:00
10/3/2018 21:30:00
10/4/2018 6:00:00""")
df = pd.read_csv(txtFile, sep='\t')
pd.to_datetime(df['date'] + ' ' + df['time']).diff().fillna(0)
输出:
0 00:00:00
1 01:00:00
2 01:00:00
3 01:00:00
4 01:00:00
5 01:00:00
6 01:00:00
7 01:45:00
8 01:15:00
9 01:00:00
10 01:00:00
11 01:00:00
12 01:00:00
13 01:00:00
14 01:30:00
15 08:30:00
dtype: timedelta64[ns]
答案 1 :(得分:1)
1)将您的csv(带有标题和制表符分隔的内容)读取到熊猫数据框中:
import pandas as pd
df = pd.read_csv('your_file.csv', header=0, sep='\t')
2)如果正确完成,您现在将拥有一个带有日期列和时间列的数据框。从以下两个中创建一个熊猫的datetime列:
df['date_time'] = pd.to_datetime(df['date'] + ' ' + df['time'])
3)使用shift()获取上面一行的date_time,并计算该行与其上面一行的date_time值之差:
df['time_diff'] = df['date_time'] - df['date_time'].shift()
4)第一个值是NaT(不是时间值),因为它上面没有单元格。将此值填充为0。
df['time_diff'].fillna(0, inplace=True)