Как перебирать строки в столбце времени, чтобы рассчитать разницу во времени, используя panda python - PullRequest
0 голосов
/ 04 декабря 2018

Здесь я хочу вычислить временной интервал между строками в импорте временного столбца из 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 голосов
/ 05 декабря 2018

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]
0 голосов
/ 05 декабря 2018

1) Считайте ваш CSV (с заголовком и разделенными табуляцией?) В кадр данных pandas:

import pandas as pd

df = pd.read_csv('your_file.csv', header=0, sep='\t')

2) Если все сделано правильно, у вас теперь будет кадр данных со столбцом даты и временемколонка.Создайте столбец даты и времени для панд из этих двух:

df['date_time'] = pd.to_datetime(df['date'] + ' ' + df['time'])

3) Получите date_time из строки выше с помощью shift () и вычислите разницу между значением date_time этой строки и ее строкой выше:

df['time_diff'] = df['date_time'] - df['date_time'].shift()

4) Первое значение - это NaT (не значение времени), поскольку оно не имеет ячейки выше.Заполните это значение 0.

df['time_diff'].fillna(0, inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...