Streamlit: not present 'id_vars' in DataFrame

To be honest, I’m new to Pandas and to Streamlit, however, I tried to do some stuff for my personal interest.

Here’s the script so far:

import pandas as pd
import streamlit as st

st.title('Vaccine Overview')

@st.cache_data
def get_data():
    df = pd.read_csv('https://opendata.sozialversicherung.at/eimpfpass/COVID19_vaccination_agegroups_v202210.csv', sep=';')
    return df

df = get_data()

df_age_vacc = df.query('state_id == 11')\
    [['age_group','vaccine','vaccinations_administered_cumulative']]\
        .groupby(['age_group','vaccine'])['vaccinations_administered_cumulative']\
            .sum()

df_age_vacc.index.set_names(['Altersgruppe','Impfstoff'], inplace=True)
df_age_vacc.rename('Menge', inplace=True)

st.bar_chart(df_age_vacc)

Whenever I run the script using Streamlit I get the following error:
KeyError: "The following 'id_vars' are not present in the DataFrame: ['index']"

What am I doing wrong here? As I noted I’m an absolute beginner with this, Pandas is not my domain.

Any help is very appreciated. Thanks.

In [70]: df_age_vacc.index
Out[70]: 
MultiIndex([(      '00-11',    'AstraZeneca'),
            (      '00-11', 'BioNTechPfizer'),
            (      '00-11',        'Janssen'),
            (      '00-11',        'Moderna'),
            (      '00-11',        'Novavax'),
            (      '00-11', 'Sanofi Pasteur'),
            (      '00-11',        'Valneva'),
            (      '12-14',    'AstraZeneca'),
            (      '12-14', 'BioNTechPfizer'),
            (      '12-14',        'Janssen'),
            (      '12-14',        'Moderna'),
            (      '12-14',        'Novavax'),
            (      '12-14', 'Sanofi Pasteur'),
            (      '12-14',        'Valneva'),
            (      '15-24',    'AstraZeneca'),
            (      '15-24', 'BioNTechPfizer'),
            (      '15-24',        'Janssen'),
            (      '15-24',        'Moderna'),
            (      '15-24',        'Novavax'),
            (      '15-24', 'Sanofi Pasteur'),
            (      '15-24',        'Valneva'),
            (      '25-34',    'AstraZeneca'),
            (      '25-34', 'BioNTechPfizer'),
            (      '25-34',        'Janssen'),
            (      '25-34',        'Moderna'),
            (      '25-34',        'Novavax'),
            (      '25-34', 'Sanofi Pasteur'),
            (      '25-34',        'Valneva'),
            (      '35-44',    'AstraZeneca'),
            (      '35-44', 'BioNTechPfizer'),
            (      '35-44',        'Janssen'),
            (      '35-44',        'Moderna'),
            (      '35-44',        'Novavax'),
            (      '35-44', 'Sanofi Pasteur'),
            (      '35-44',        'Valneva'),
            (      '45-54',    'AstraZeneca'),
            (      '45-54', 'BioNTechPfizer'),
            (      '45-54',        'Janssen'),
            (      '45-54',        'Moderna'),
            (      '45-54',        'Novavax'),
            (      '45-54', 'Sanofi Pasteur'),
            (      '45-54',        'Valneva'),
            (      '55-64',    'AstraZeneca'),
            (      '55-64', 'BioNTechPfizer'),
            (      '55-64',        'Janssen'),
            (      '55-64',        'Moderna'),
            (      '55-64',        'Novavax'),
            (      '55-64', 'Sanofi Pasteur'),
            (      '55-64',        'Valneva'),
            (      '65-74',    'AstraZeneca'),
            (      '65-74', 'BioNTechPfizer'),
            (      '65-74',        'Janssen'),
            (      '65-74',        'Moderna'),
            (      '65-74',        'Novavax'),
            (      '65-74', 'Sanofi Pasteur'),
            (      '65-74',        'Valneva'),
            (      '75-84',    'AstraZeneca'),
            (      '75-84', 'BioNTechPfizer'),
            (      '75-84',        'Janssen'),
            (      '75-84',        'Moderna'),
            (      '75-84',        'Novavax'),
            (      '75-84', 'Sanofi Pasteur'),
            (      '75-84',        'Valneva'),
            (        '85+',    'AstraZeneca'),
            (        '85+', 'BioNTechPfizer'),
            (        '85+',        'Janssen'),
            (        '85+',        'Moderna'),
            (        '85+',        'Novavax'),
            (        '85+', 'Sanofi Pasteur'),
            (        '85+',        'Valneva'),
            ('NotAssigned',    'AstraZeneca'),
            ('NotAssigned', 'BioNTechPfizer'),
            ('NotAssigned',        'Janssen'),
            ('NotAssigned',        'Moderna'),
            ('NotAssigned',        'Novavax'),
            ('NotAssigned', 'Sanofi Pasteur'),
            ('NotAssigned',        'Valneva')],
           names=['Altersgruppe', 'Impfstoff'])

In [71]: type(df_age_vacc)
Out[71]: pandas.core.series.Series

>Solution :

You might need to unstack your data as bar_chart is using the index as x and the columns as y and internally melts the data:

st.bar_chart(df_age_vacc.unstack())

Output:

enter image description here

Leave a Reply