Умножение временной шкалы и экспоненциальные вычисления в pandas - PullRequest
0 голосов
/ 16 апреля 2020

Я новичок в программировании и хотел бы использовать pandas для расчета экспоненциального затухания некоторых данных. Однако у меня возникают проблемы с запуском умножения или экспоненциальных операций со значениями дельты времени. Я думаю, что значения timedelta могут не поддерживаться для этих более сложных операций, но наверняка есть простой способ сделать это?

Код ввода:

import pandas as pd
import numpy as np

df = pd.read_excel('exponential example.xlsx', sheet_name = 'Sheet1',
                  usecols = ("A:D"), parse_dates = True)


df['time difference']= df['date 1']-df['date 2']
print(df.head(3))


df['output'] = df['value 1']*np.exp(df['time difference']*.01)

Выход:

  sample     date 1     date 2  value 1 time difference

0       1 2018-01-01 2019-01-01        2       -365 days
1       2 2018-01-01 2019-01-01        4       -365 days
Traceback (most recent call last):
  File "/Users/l225445/Desktop/python test/exponential example.py", line 15, in <module>
    df['output'] = df['value 1']*np.exp(df['time difference']*.01)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/series.py", line 679, in __array_ufunc__
    result = getattr(ufunc, method)(*inputs, **kwargs)
TypeError: ufunc 'exp' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

1 Ответ

0 голосов
/ 16 апреля 2020

Во-первых, из того, что мы видим из ваших данных, кажется более естественным определить

df['time difference'] = df['date 2'] - df['date 1']

, чтобы получить положительные значения.

Затем, чтобы иметь возможность выполнять произвольные вычисления с этими значениями, вы должны выбрать единицу и преобразовать их в чистый числовой тип c. Например, вы можете сделать это, чтобы получить разницу во времени в днях в виде числового столбца c:

df['time difference days'] = df['time difference'].dt.days

См. Раздел об атрибутах в документации pandas Timedelta .

Теперь ваш расчет должен работать, если вы просто используете цифру c Series вместо Timedelta Series.

...