Добавить время к подмножеству строк в панде DataFrame - PullRequest
0 голосов
/ 16 мая 2018

Приведенный ниже код выдает df:

import pandas as pd
import random
from datetime import timedelta

def randomTime():

    rtime = int(random.random()*86400)

    hours   = int(rtime/3600)
    minutes = int((rtime - hours*3600)/60)
    seconds = rtime - hours*3600 - minutes*60

    time_string = '%02d:%02d:%02d' % (hours, minutes, seconds)
    return time_string

time = [randomTime() for _ in range(8)]

k = 5
N = 8

d = ({'Time' : (time),
    'Events' : ['ABC','DEF','GHI','JKL','ABC','DEF','GHI','JKL'],
    'Number1' : ['xx','xx',1,'xx','xx','xx',2,'xx'],
    'Number2' : ['xx',1,'xx',1,'xx',2,'xx',2]})

df = pd.DataFrame(data=d)

Я пытаюсь добавить время к выбранным строкам временных меток в пределах df. Я пытаюсь изменить последние 4 временные метки, чтобы добавить 3 часа. На данный момент он производит струны.

df.iloc[4:8,3] = pd.TimedeltaIndex(df.iloc[4:8,3]) + timedelta(hours=3)

print(df)

Output:  
Events Number1 Number2            Time
0    ABC      xx      xx        14:25:51
1    DEF      xx       1        10:02:32
2    GHI       1      xx        01:23:32
3    JKL      xx       1        07:27:42
4    ABC      xx      xx  74325000000000
5    DEF      xx       2  38992000000000
6    GHI       2      xx  19158000000000
7    JKL      xx       2  26746000000000

Я не уверен, что это потому, что дата добавляется в расчет здесь? Я не уверен, что делаю не так.

1 Ответ

0 голосов
/ 16 мая 2018

Ваш Time столбец является столбцом строк. Я бы рекомендовал сначала преобразовать весь столбец в timedelta , а затем добавить эти 3 часа. В противном случае вы в конечном итоге смешаете dtypes (string и timedelta), и могут произойти странные вещи.

df['Time'] = pd.to_timedelta(df.Time, errors='coerce')
df.iloc[4:8, 3] += pd.Timedelta(hours=3)

df

  Events Number1 Number2            Time
0    ABC      xx      xx 0 days 13:51:35
1    DEF      xx       1 0 days 23:14:11
2    GHI       1      xx 0 days 02:16:28
3    JKL      xx       1 0 days 05:25:40
4    ABC      xx      xx 0 days 15:40:15
5    DEF      xx       2 0 days 04:05:26
6    GHI       2      xx 0 days 15:48:06
7    JKL      xx       2 1 days 00:12:30
...