【发布时间】:2015-09-04 10:55:45
【问题描述】:
我在将数据框转换为 csv 时遇到了一些性能问题。
import numpy as np
import pandas as pd
from time import time
t =time();_=pd.DataFrame(np.random.sample((10000,10))).to_csv(encoding=None); print time()-t
0.159129142761
t =time();_=pd.DataFrame(np.random.sample((10000,10))).to_csv(encoding='utf8'); print time()-t
1.16141009331
t =time();_=pd.DataFrame(np.random.sample((10000,10))).to_csv(encoding='ascii'); print time()-t
1.13821101189
为什么指定编码类型会极大地影响此方法的性能?在我的特殊情况下,我宁愿使用默认值(无),但由于我需要转换的数据帧包含一些特殊字符(中文),我不能使用性能优越的默认编码。
显然,默认编码是“ascii”,但选择时与 utf8 具有完全相同的性能,这是我需要使用处理非英文字符的一种。
知道如何应对速度并解决这个问题吗?
我正在使用 pandas 0.16.0 和 Python 2.7.9。
编辑:
根据rth 的建议,我已经升级到 pandas 0.16.2,我得到了更好的时机
import pandas as pd
import numpy as np
x = pd.DataFrame(np.random.sample((10000,10)))
%timeit x.copy().to_csv(encoding='ascii')
%timeit x.copy().to_csv()
%timeit x.copy().to_csv(encoding='utf8')
10 loops, best of 3: 160 ms per loop
10 loops, best of 3: 73.7 ms per loop
10 loops, best of 3: 158 ms per loop
指定编码仍然比使用默认编码慢一半。明显优于使用 0.16.0 版本的前一个场景,但仍然存在明显差异。
我仍然很想知道这是否是一个错误,以及我该如何改进它......在我的情况下,它是 10 分钟或 20 分钟之间的差异!
【问题讨论】:
-
是的..有非常轻微的变化,但可重现。
标签: python-2.7 pandas export-to-csv