我正在阅读两种类型的csv文件,它们非常相似。他们差不多长了20,000行。每一行表示每秒钟记录的参数。因此,第一列是时间戳。
在这两种情况下,命令都是相同的:
data = pd.read_csv(file)
data['Timestamp'] = pd.to_datetime(data['Timestamp'])我检查两行的执行时间:
唯一的区别是日期模式。我不会怀疑的。你知道为什么吗?你知道怎么解决这个问题吗?
发布于 2018-09-24 14:07:08
当需要自动解析日期时,pandas.to_datetime非常慢(在某些情况下)。因为您似乎知道格式,所以应该显式地将它们传递给format参数,这将大大提高速度。
下面是一个例子:
import pandas as pd
df1 = pd.DataFrame({'Timestamp': ['2018-09-24 15:38:06']*10**5})
df2 = pd.DataFrame({'Timestamp': ['2018-09-24 03:38:06 PM']*10**5})
%timeit pd.to_datetime(df1.Timestamp)
#21 ms ± 50.4 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit pd.to_datetime(df2.Timestamp)
#14.3 s ± 122 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)那要慢700倍。现在,显式地指定格式:
%timeit pd.to_datetime(df2.Timestamp, format='%Y-%m-%d %I:%M:%S %p')
#384 ms ± 1.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)pandas仍然在更慢地解析第二种日期格式,但它并没有以前那么糟糕。
编辑:在pd.__version__ == '1.0.5'中,由于这种性能改进在pd.__version == '0.25.0'中的实现,以前非常缓慢的解析格式的自动解析似乎已经变得更好了。
import pandas as pd
df1 = pd.DataFrame({'Timestamp': ['2018-09-24 15:38:06']*10**5})
df2 = pd.DataFrame({'Timestamp': ['2018-09-24 03:38:06 PM']*10**5})
%timeit pd.to_datetime(df1.Timestamp)
#9.01 ms ± 294 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit pd.to_datetime(df2.Timestamp)
#9.1 ms ± 267 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)https://stackoverflow.com/questions/52480839
复制相似问题