从一系列熊猫时间戳中提取月份的最快方法

时间:2015-09-15 03:02:48

标签: python pandas

我有一个非常大的pandas DataFrame(大约7000万条记录),其中包含一个包含pandas Timestamps的日期列。我需要从这些月份和年份,但我找到了提取这些不可行的慢的天真方法。

这是一个小例子,在我的机器上大约需要半秒钟。我的实际问题要大得多,而且时间戳的间隔不均匀。

ser = pd.Series(pd.date_range('1799-01-01','2100-12-01'))

%timeit [x.month for x in ser]
#1 loops, best of 3: 558 ms per loop

我希望有一种方法可以转换为DateTimeIndex或者某种能够快速提取月份和年份的东西,这本身就不会永久。

2 个答案:

答案 0 :(得分:4)

您可以将dt访问器用于类似日期时间的系列:

ser = pd.Series(pd.date_range('1799-01-01','2100-12-01'))
print ser.dt.month
# [ 1  1  1 ..., 11 11 12]
%timeit ser.dt.month
# 100 loops, best of 3: 14.7 ms per loop

手动循环方法:

%timeit [x.month for x in ser]
1 loops, best of 3: 389 ms per loop

答案 1 :(得分:1)

我不认为70个MI记录是你应该在DataFrame上持有的东西。但好吧,不能由我来判断你的造型。

在处理时间方面,我会将您的日期时间索引转换为时间纪元值数组。所以你现在就要使用数字了。文档 - > https://docs.python.org/2/library/time.html

我相信它会使操作更快,但代码会更不干净。