如何使用熊猫python

时间:2018-12-04 09:31:49

标签: python pandas

在这里,我想计算从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

这是我想通过使用此代码显示的输出。但是我不知道如何遍历行以获取两次之间的时间差。我的时差以小时为单位显示。

2 个答案:

答案 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)