怎么優化這個for 回圈,當index的長度超過10萬條的時候,處理的速度就變得很慢,這種情況該怎么優化,求大佬指教
for ind in range(len(index)):
temp=df[df.index==index[ind]]
try:
dsflux.append(temp.sort_values(by = 'vn',axis=0,ascending=False)[0:2]['dsflux'].values.mean())
TEM.append(temp.sort_values(by = 'vn',axis=0,ascending=False)[0:4]['tem'].values.mean())
HUM.append(temp.sort_values(by = 'vn',axis=0,ascending=False)[0:4]['hum'].values.mean())
WIND.append(temp.sort_values(by = 'vn',axis=0,ascending=False)[0:4]['wind'].values.mean())
except:
dsflux.append(np.nan)
TEM.append(np.nan)
HUM.append(np.nan)
WIND.append(np.nan)
try:
ALBEDO.append(temp.sort_values(by = 'vn',axis=0,ascending=False)[0:2]['albedo'].values.mean())
except:
ALBEDO.append(np.nan)
try:
WTYPE.append(temp.sort_values(by = 'vn',axis=0,ascending=False)[0:1]['wtype'].values.mean())
except:
WTYPE.append(np.nan)
uj5u.com熱心網友回復:
首先剔除不需要的元素,就去掉一些uj5u.com熱心網友回復:
Python的運算速度是C++的二百分之一!告你個好辦法,學C吧

提示:去掉一些無用的
uj5u.com熱心網友回復:
ft, radi, tem, vn, hum, wind, albedo, wtype = [], [], [], [], [], [], [], []if len(data) > 0:
for i in range(len(data)):
ft.append(data[i][0])
radi.append(data[i][1])
tem.append(data[i][2])
vn.append(data[i][3])
hum.append(data[i][4])
wind.append(data[i][5])
albedo.append(data[i][6])
if data[i][7] == 6:
if initialize == 'YES':
wtype.append(1)
else:
wtype.append(np.nan)
else:
wtype.append(wtype_dict(data[i][7])[0])
df = pd.DataFrame(
{'dsflux': radi, 'tem': tem, 'vn': vn, 'hum': hum, 'wind': wind, 'albedo': albedo, 'wtype': wtype},
index=ft)
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')
df = df[~df['wtype'].isin([0.539])]
index = df.groupby(df.index).mean().index
dsflux, TEM, HUM, WIND, ALBEDO, WTYPE = [], [], [], [], [], []
for ind in range(len(index)):
temp = df[df.index == index[ind]]
temp_data = temp.sort_values(by='vn', axis=0, ascending=False)
try:
dsflux.append(temp_data[0:2]['dsflux'].values.mean())
TEM.append(temp_data[0:4]['tem'].values.mean())
HUM.append(temp_data[0:4]['hum'].values.mean())
WIND.append(temp_data[0:4]['wind'].values.mean())
except:
dsflux.append(np.nan)
TEM.append(np.nan)
HUM.append(np.nan)
WIND.append(np.nan)
try:
ALBEDO.append(temp_data[0:2]['albedo'].values.mean())
except:
ALBEDO.append(np.nan)
try:
WTYPE.append(temp_data[0:1]['wtype'].values.mean())
except:
WTYPE.append(np.nan)
odc = {'dsflux': dsflux, 'tem': TEM, 'vn': df.groupby(df.index)['vn'].max().values, 'hum': HUM, 'wind': WIND,
'albedo': ALBEDO, 'wtype': WTYPE}
outdf = pd.DataFrame(odc, index=index).dropna()
else:
outdf = pd.DataFrame(columns=['dsflux', 'tem', 'vn', 'hum', 'wind', 'albedo', 'wtype'])
這樣修改了下,速度快了30%,感徑訓是有點慢,再應該怎么優化呢。
uj5u.com熱心網友回復:
那就不要使用 for 回圈,切片計算或者 分塊處理
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/63783.html
