Получение среднего из кадра данных, состоящего из метки времени панд - PullRequest
0 голосов
/ 21 мая 2018

У меня есть две серии панд, closedDate и createdDate, то есть элементы являются временными метками панд, class 'pandas._libs.tslib.Timestampclass 'pandas._libs.tslib.Timestamp.

Я вычел эти две серии панд, чтобы составить список age панд timedelta.

closedDate = data.iloc[:,1]
createdDate = data.iloc[:,2]
age = [x-y for x,y in zip(closedDate, createdDate)]

Теперь я хочу получить среднее значение age, но с моимВ строке кода я получаю сообщение об ошибке.

In: average_age = functools.reduce(lambda x, y: x + y, age) / len(age)

Out: OverflowError: int too big to convert

Как я могу это исправить ??

Спасибо!

Ответы [ 2 ]

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

Вы должны сделать это с сериями, как предложил jpp, но, за исключением этого, вот как вы могли бы сделать это с предоставленным вами списком.

average_age = sum(age, timedelta()) / len(age)
0 голосов
/ 21 мая 2018

Вы можете и должны стремиться использовать векторизованные функции для этой задачи.

В этом примере вы можете вычесть одно pd.Series из другого.Затем вы можете использовать метод mean для вычисления среднего.

data = pd.DataFrame({'createdDate': [pd.Timestamp('2018-01-01'),
                                     pd.Timestamp('2018-05-01')],
                     'closedDate': [pd.Timestamp('2018-02-01'),
                                    pd.Timestamp('2018-07-01')]})

closedDate = data['closedDate']
createdDate = data['createdDate']

ages = closedDate - createdDate

print(ages)

# 0   31 days
# 1   61 days
# dtype: timedelta64[ns]

res = ages.mean()

print(res)

# 46 days 00:00:00

Существует две основные причины, по которым использование векторизованных функций лучше в этом случае:

  1. В основе pd.Timestamp лежат числовые массивы ( источник ).
  2. zip в массивах ниже, чем zip в списках ( источник ).
...