用 PANDAS 或 plot 绘制 SDMX
Plotting SDMX with PANDAS or plot
使用 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 的新手,所以我很感激每条可以帮助我解决这个问题的评论。
我认为您的主要问题是由于您的 df 使用了 multiindex。我不确定这是否是您要实现的目标,但您可以尝试以下代码:
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()
使用 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 的新手,所以我很感激每条可以帮助我解决这个问题的评论。
我认为您的主要问题是由于您的 df 使用了 multiindex。我不确定这是否是您要实现的目标,但您可以尝试以下代码:
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()