Python: манипулировать таймфреймом времени в pandas - PullRequest
1 голос
/ 05 февраля 2020

У меня есть Pandas фрейм данных с numpy .ndarray в качестве контента.

data_empty = {}
df = pd.DataFrame(data_empty)
df['HH'] = np.arange(0,10)

Фрейм данных df['HH'] представляет собой разницу во времени по отношению к фиксированной дате:

start_date =['1990-01-01 00:00:00']

Я хотел бы получить новый столбец Dataframe df['new_date'], который показывает фактическую дату в том же формате, что и df['HH]. Когда я пытаюсь:

df['time_added'] = pd.to_timedelta(df['HH'],'h')
df['new_date'] =  pd.to_datetime(start_date)+ df['time_added']

я получаю сообщение об ошибке:

ValueError: cannot add indices of unequal length.

Я хотел бы знать ответ на два возможных решения: 1) как я могу создать фрейм данных df['start_date'] все со значением start_date, поэтому я могу добавить start_date к time_added? 2) Как я могу предотвратить создание нового кадра данных с тем же значением start_date и просто оценить

df['new_date'] =  pd.to_datetime(start_date)+ df['time_added']

без проблем с длиной?

1 Ответ

0 голосов
/ 05 февраля 2020

Сначала удалите один список элементов для start_date и для преобразования времени используйте to_timedelta:

start_date ='1990-01-01 00:00:00'
df['Date']  = pd.to_datetime(start_date) + pd.to_timedelta(df['HH'],'h')
print (df)
   HH                Date
0   0 1990-01-01 00:00:00
1   1 1990-01-01 01:00:00
2   2 1990-01-01 02:00:00
3   3 1990-01-01 03:00:00
4   4 1990-01-01 04:00:00
5   5 1990-01-01 05:00:00
6   6 1990-01-01 06:00:00
7   7 1990-01-01 07:00:00
8   8 1990-01-01 08:00:00
9   9 1990-01-01 09:00:00

Или используйте только to_datetime с origin и unit параметры:

start_date ='1990-01-01 00:00:00'
df['Date']  = pd.to_datetime(df['HH'], unit='h', origin=start_date)
print (df)
   HH                Date
0   0 1990-01-01 00:00:00
1   1 1990-01-01 01:00:00
2   2 1990-01-01 02:00:00
3   3 1990-01-01 03:00:00
4   4 1990-01-01 04:00:00
5   5 1990-01-01 05:00:00
6   6 1990-01-01 06:00:00
7   7 1990-01-01 07:00:00
8   8 1990-01-01 08:00:00
9   9 1990-01-01 09:00:00
...