首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >漂亮的汤-将属性转换成数据- BEA API

漂亮的汤-将属性转换成数据- BEA API
EN

Stack Overflow用户
提问于 2018-11-05 03:52:45
回答 1查看 167关注 0票数 0

我试图使用BEA的API来查询收入数据。API指令- guide.pdf

我的目标是解析生成的XML,并将其转换为数据,并为不同年份提供列。

我遇到的问题是,我解析数据的方式是“融化的”格式,我想要这些年的单独列和这些年的收入数据。

我怎样才能做到这一点?下面是我正在使用的代码。它要求您通过电子邮件注册API密钥,并在下面的URL中"UserID“之后输入它。

代码语言:javascript
复制
bea_income = 'https://apps.bea.gov/api/data/?UserID=ENTERYOURAPIKEY&method=GetData&'\
'datasetname=RegionalIncome&TableName=RPI2&LineCode=2&Year=2014,2015,2016&GeoFips=MSA&ResultFormat=xml'

bea_inc_request = requests.get(bea_income, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
                                                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'})
bea_inc_html = bea_inc_request.content
bea_inc_soup = BeautifulSoup(bea_inc_html, 'xml')

MSA = []
TimePeriod = []
Income = []
GeoFips = []

for i in range(len(bea_inc_soup.Results.find_all('Data'))):
    MSA.append(bea_inc_soup.Results.find_all('Data')[i]['GeoName'])
    GeoFips.append(bea_inc_soup.Results.find_all('Data')[i]['GeoFips'])
    Income.append(bea_inc_soup.Results.find_all('Data')[i]['DataValue'])
    TimePeriod.append(bea_inc_soup.Results.find_all('Data')[i]['TimePeriod'])


income_data = pd.DataFrame({'MSA':MSA, 'FIPS':GeoFips,  'Year':TimePeriod, 'Income':Income})

                                           MSA  FIPS    Year    Income
0   Abilene, TX (Metropolitan Statistical Area) 10180   2014    41818
1   Abilene, TX (Metropolitan Statistical Area) 10180   2015    41651
2   Abilene, TX (Metropolitan Statistical Area) 10180   2016    40409
3   Akron, OH (Metropolitan Statistical Area)   10420   2016    45448
4   Akron, OH (Metropolitan Statistical Area)   10420   2015    45298
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-13 02:12:41

为了将数据从“融化”的格式中提取出来,我基于YearIncome列进行了旋转。

代码语言:javascript
复制
income_pivot = income_data[['Year','Income']].pivot(columns='Year')['Income']

Year    2014    2015    2016
0   41,818       NaN    NaN
1   NaN       41,651    NaN
2   NaN          NaN    40,409
3   44,097       NaN    NaN
4   NaN       45,298    NaN
5   NaN          NaN    45,448

然后,我手动放弃了从支点创建的NaNs,以便按年计算每个MSA的收入。

代码语言:javascript
复制
income_pivot_2014 = income_pivot.iloc[:,0].dropna().values
income_pivot_2015 = income_pivot.iloc[:,1].dropna().values
income_pivot_2016 = income_pivot.iloc[:,2].dropna().values

以MSA的名义添加

代码语言:javascript
复制
income_pivot_msa = income_data['MSA'].unique()

并将它们合并成一个数据集。

代码语言:javascript
复制
income_data_form = pd.DataFrame({'MSA':income_pivot_msa,
                                 '2014_inc':income_pivot_2014,
                                 '2015_inc':income_pivot_2015,
                                 '2016_inc':income_pivot_2016,
                                 'FIPS':income_data['FIPS'].unique()})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53148088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档