簡體   English   中英

如何優化此 Python 代碼?

[英]How can I optimise this Python code?

我想獲得每個國家/地區所有IndicatorsCodeYear值的平均值:

import numpy as np
import pandas as pd
datos = pd.read_csv("suramerica.csv")

media = list()
agricultura = list()
flag=0

paises = np.array(['Antigua and Barbuda','Argentina','Chile','Colombia'])
indicadores_agricultura = np.array(['EG.ELC.ACCS.RU.ZS','EG.NSF.ACCS.RU.ZS'])

for i in paises:
    for j in indicadores_agricultura:
        for k in range(len(datos)):
            if i==datos['CountryName'][k] and j==datos['IndicatorCode'][k]:
                flag=1
                media.append(datos['Year'][k])
    if flag==1:
        agricultura.append(np.array([i,np.mean(media)]))
        del media[:]
        flag=0
pd.DataFrame(agricultura,columns=['Paises','Agricultura y Desarrollo Rural'])

這是結果的數據幀:

輸出數據

如果您需要訪問 csv: Suramerica.csv

這段代碼需要很長時間才能執行。 感謝您的時間 - 任何建議都會很棒。

似乎沒有必要為每個組合遍歷完整的數據。 我正在使用 dict 對象來保存所需的信息。 然后使用它計算 np.mean 。 這將大大提高執行速度。 這是代碼:

import numpy as np
import pandas as pd
datos = pd.read_csv("suramerica.csv")

agricultura = list()

output = {}


paises = np.array(['Antigua and Barbuda','Argentina','Chile','Colombia'])
indicadores_agricultura = np.array(['EG.ELC.ACCS.RU.ZS','EG.NSF.ACCS.RU.ZS'])


for k in range(len(datos)):
    cn = datos['CountryName'][k]
    indicator_code = datos['IndicatorCode'][k]
    # change1
    if cn not in output.keys():
            output[cn] = []
    if cn in paises and indicator_code in indicadores_agricultura:
        year = datos['Year'][k]

for o in output:
    # change2
    media = output.get(o)
    if not media:
        media = 0.0
    agricultura.append(np.array([o,np.mean(media)]))

output2 = pd.DataFrame(agricultura,columns=['Paises','Agricultura y Desarrollo Rural'])
print(output2)

我會以這種方式開始編寫循環:

for k, _ in enumerate(datos):
    cn = datos['CountryName'][k]
    ic = datos['IndicatorCode'][k]

    for i in paises:
        if i != cn:
            continue
        for j in indicadores_agricultura:
            if j == ic:
                flag = 1
                media.append(datos['Year'][k])

    if flag:
        agricultura.append(np.array([i,np.mean(media)]))
        del media[:]
        flag = 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM