如何优化此Python代码?

时间:2017-01-16 14:10:42

标签: python csv

我希望得到每个国家/地区Year的{​​{1}}值的平均值:

IndicatorsCode

以下是结果的DataFrame:

OutputData

如果您需要访问csv:Suramerica.csv

此代码需要很长时间才能执行。感谢您的时间 - 任何建议都会很棒。

2 个答案:

答案 0 :(得分:0)

我会以这种方式开始编写循环:

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

答案 1 :(得分:0)

似乎没有必要遍历每个组合的完整数据。 我正在使用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)