我有一个非常大的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
或者某种能够快速提取月份和年份的东西,这本身就不会永久。
答案 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
我相信它会使操作更快,但代码会更不干净。