从包含pandas时间戳

时间:2018-05-21 18:21:22

标签: python pandas datetime timedelta

我有两个熊猫系列,closedDatecreatedDate,这些元素是pandas时间戳,class 'pandas._libs.tslib.Timestampclass 'pandas._libs.tslib.Timestamp

我已经减去了这两个熊猫系列,以制作大熊猫时间名单age

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

现在,我希望得到age的平均值,但是我的代码行出错了。

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

出:OverflowError: int too big to convert

我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以而且应该使用矢量化函数来完成此任务。

在此示例中,您可以从另一个中减去一个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是数字数组(source)。
  2. 数据上的
  3. zip在列表(source)上的表现低于zip

答案 1 :(得分:0)

你应该像jpp建议的系列那样做,但除此之外,你可以用你提供的列表来做这件事。

average_age = sum(age, timedelta()) / len(age)