我已將此報(bào)告為關(guān)于熊貓問題的問題。同時(shí),我將其發(fā)布在這里,以期節(jié)省其他人的時(shí)間,以防他們遇到類似的問題。在對需要優(yōu)化的過程進(jìn)行性能分析時(shí),我發(fā)現(xiàn)將列重命名為IN120可以將性能(執(zhí)行時(shí)間)提高x120。分析表明這與垃圾收集有關(guān)(請參閱下文)。此外,通過避免dropna方法,可以恢復(fù)預(yù)期的性能。以下簡短示例演示了系數(shù)x12:import pandas as pdimport numpy as npinplace = True%%timeitnp.random.seed(0)r,c = (7,3)t = np.random.rand(r)df1 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)indx = np.random.choice(range(r),r/3, replace=False)t[indx] = np.random.rand(len(indx))df2 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)df = (df1-df2).dropna()## inplace rename:df.rename(columns={col:'d{}'.format(col) for col in df.columns}, inplace=True)100個(gè)循環(huán),最佳3:每個(gè)循環(huán)15.6毫秒的第一條輸出線%%prun:ncalls tottime percall cumtime percall filename:lineno(function)1 0.018 0.018 0.018 0.018 {gc.collect}inplace = False%%timeitnp.random.seed(0)r,c = (7,3)t = np.random.rand(r)df1 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)indx = np.random.choice(range(r),r/3, replace=False)t[indx] = np.random.rand(len(indx))df2 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)df = (df1-df2).dropna()## avoid inplace:df = df.rename(columns={col:'d{}'.format(col) for col in df.columns})1000次循環(huán),最好為3:每個(gè)循環(huán)1.24毫秒避免dropna通過避免該dropna方法,可以恢復(fù)預(yù)期的性能:%%timeitnp.random.seed(0)r,c = (7,3)t = np.random.rand(r)df1 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)indx = np.random.choice(range(r),r/3, replace=False)t[indx] = np.random.rand(len(indx))df2 = pd.DataFrame(np.random.rand(r,c), columns=range(c), index=t)#no dropna:df = (df1-df2)#.dropna()## inplace rename:df.rename(columns={col:'d{}'.format(col) for col in df.columns}, inplace=True)1000個(gè)循環(huán),每個(gè)循環(huán)最好3:865 μs1000個(gè)循環(huán),最好為3:每個(gè)循環(huán)902 μs
2 回答

陪伴而非守候
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不會(huì)說語法沒有任何優(yōu)勢-它使您可以避免在等號的兩邊都放長規(guī)范。這是some_long_complicated_expression[some:long_slice, more_information_here] += 1
over 優(yōu)勢的一種變體some_long_complicated_expression[some:long_slice, more_information_here] = some_long_complicated_expression[some:long_slice, more_information_here] + 1
。
添加回答
舉報(bào)
0/150
提交
取消