使用Pandas或绘图绘制SDMX

2024-06-16 13:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

使用PANDAS或Plotly绘制SDMX数据的最简单方法是什么

我有以下代码:

import pandasdmx as sdmx 
import plotly.express as px

df = sdmx.Request('OECD').data(
  resource_id='MEI_FIN',
  key='IR3TIB.GBR+USA.M',
  params={'startTime': '1900-06', 'dimensionAtObservation': 'TimeDimension'},
).write().reset_index()
df

在尝试绘图时,我最终得到以下错误

fig = px.line(df, x="TIME_PERIOD", y='', title='Life expectancy in Country: Denmark')
fig.show()

详情如下:

ValueError: Value of 'y' is not the name of a column in 'data_frame'. Expected one of `[('TIME_PERIOD', '', ''), ('IR3TIB', 'GBR', 'M'), ('IR3TIB', 'USA', 'M')] but received:` 

我是python新手,所以我非常感谢能帮我解决这个问题的每一条评论


Tags: ofinimportpandasdfdatatimeas
1条回答
网友
1楼 · 发布于 2024-06-16 13:43:19

我认为你的主要问题是因为你的df是多索引的。我不确定这是否是您要实现的目标,但您可以尝试以下代码:

import pandasdmx as sdmx 
import plotly.express as px

df = sdmx.Request('OECD').data(
  resource_id='MEI_FIN',
  key='IR3TIB.GBR+USA.M',
  params={'startTime': '1900-06', 'dimensionAtObservation': 'TimeDimension'},
).write().reset_index()

# with this we get rid of multi-index
# you could use a loop if you prefer I used
# list of comprehension

df.columns = ["_".join([c for c in col if c!='']) 
              for col in df.columns]

fig = px.line(df,
              x="TIME_PERIOD",
              y=['IR3TIB_GBR_M', 'IR3TIB_USA_M'],
              title='Life expectancy in GBR and USA')\
        .update_layout(title_x=0.5)
fig.show()

enter image description here

相关问题 更多 >