我有一个代码,该代码可以反复调用联合国商品贸易数据库中的多个api。然后将它们附加到一个单一的数据集中,该数据集包含1991年至2018年的所有报告者和年份。我正在尝试获取每个国家/地区每年净值加权的贸易价值平均值。
import requests
import pandas as pd
import json
import numpy as np
base = "http://comtrade.un.org/api/get?"
maxrec = "50000"
item = "C"
freq = "A"
px="H0"
ps="all"
r="all"
p="0"
rg="2"
cc="AG2"
fmt="json"
comtrade = pd.DataFrame(columns=['Year', 'Reporter Code', 'Reporter', 'Commodity Code', 'Commodity', 'Trade Value (US$)'])
for year in range(1991,2018):
print(r)
ps="{}".format(year)
url = base + "max=" + maxrec + "&" "type=" + item + "&" + "freq=" + freq + "&" + "px=" +px + "&" + "ps=" + str(ps) + "&" + "r="+ str(r) + "&" + "p=" + p + "&" + "rg=" +rg + "&" + "cc=" + cc + "&" + "fmt=" + fmt
# print(url)
t = requests.get(url)
x = t.json()
new = pd.DataFrame(x["dataset"])
comtrade = comtrade.append(new)
group = comtrade.groupby([ 'rtCode', 'yr'])
finalvalue = group.apply(lambda x: np.average(x['TradeValue'],
weights=x['NetWeight']))
这可能很明显,但是这里似乎是问题所在:
group = comtrade.groupby([ 'rtCode', 'yr'])
finalvalue = group.apply(lambda x: np.average(x['TradeValue'], weights=x['NetWeight']))
我收到以下错误:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
答案 0 :(得分:0)
正如您在this example URL from your scraping的以下说明中所看到的,null是数据的主要特征,该数据在您的数据框中输入为“ None”。
您可以使用Pandas的“ fillna”更改“无”类型。在此示例中,我使用了0,它可以与您的groupby一起使用,或者您可以执行“ nan”操作,因为根据他们的文档,“ GroupBy中的NA组被自动排除在外。”
from numpy import nan
comtrade = comtrade.fillna(value=0, inplace=True)