我有一个非常大的 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 或可以快速提取月份和年份的方法,而这本身不会永远持续下去。
请您参考如下方法:
您可以使用 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
