我遇到一些將數據幀轉換爲csv的性能問題。熊貓to_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完全一樣的性能時,我需要使用句柄非英文字符。
任何想法如何應對速度和解決這個問題?
我使用的是熊貓0.16.0和Python 2.7.9。
編輯:
我已經升級到大熊貓0.16.2每rth建議的,我也得到更好的時機
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分鐘之間的差異!
是的,只有很小的變化,但可重現。 –