【发布时间】:2014-03-24 03:13:33
【问题描述】:
我将一个包含 150,000 行的 csv 文件读入 pandas 数据帧。此数据框有一个字段 Date,其日期为 yyyy-mm-dd 格式。我想从中提取月、日和年,并分别复制到数据框的列Month、Day 和Year。对于几百条记录,以下两种方法可以正常工作,但是对于 150,000 条记录,执行都需要很长的时间。对于 100,000 多条记录,是否有更快的方法?
第一种方法:
df = pandas.read_csv(filename)
for i in xrange(len(df)):
df.loc[i,'Day'] = int(df.loc[i,'Date'].split('-')[2])
第二种方法:
df = pandas.read_csv(filename)
for i in xrange(len(df)):
df.loc[i,'Day'] = datetime.strptime(df.loc[i,'Date'], '%Y-%m-%d').day
谢谢。
【问题讨论】:
-
您的时间限制是多少?或者从考虑中去除机器能力,你需要什么因素来加速它?我认为“长得离谱”不足以让回答这个问题的人知道像
int(df.loc[i,'Date'][-2:])这样的答案是否足够快,暂时搁置数据格式是否足够可靠的问题认为是正确的。 -
我没有设置时间限制。数据是干净的 - 没有 NaN/NaT 条目或混乱/格式不正确的值。我想不出第三种方法来做到这一点。因此,我试图找出是否有更好的逻辑,或者是否有一些内置的 pandas 方法可以在同一台机器上加快速度。
-
您是否考虑过包装一个 csv 阅读器,以便它拆分日期列并附加日、月和年,并使用该迭代器创建一个 pandas 框架。
-
@Steve:非常感谢。这比上面两个要快。有没有办法找出每个代码执行所花费的时间?
-
@ram:使用
timeit模块。
标签: python pandas date datetime accessor