Louisiana Health Insurance: An Analysis of Medicaid Expansion

By Raphael Deykin and Yali Tiomkin

Final Data Science Tutorial - CMPS 3660 - Introduction to Data Science - Proessor Mattei

Table of Contents:

  1. Introduction
  2. Data ETL: Extraction, Transform and Load
  3. Data EDA: Exploratory Data Analysis
  4. Which factors played the biggest role in medicaid expansion?
  5. Did MedicAid change the course of Insurance rates in Louisiana?
  6. Conclusion

louisiana.jpeg

1. Introduction

On January 12, 2016, Governor John Bel Edwards signed his first executive order to start the process of Medicaid expansion in Louisiana. He promised this would be one of his frist acts as governor, which he immediately took action to turn into reality.

Medicaid Expansion in Louisiana is called Healthy Louisiana. Today, there are over 730,000 residents enrolled in Healthy Louisiana. Additionally, almost 2 millian Louisiana residents are enrolled in Medicaid. Although a much higher number than originally expected, the COVID pandemic pushed hundreds of thousands of people to join Medicaid. It proved to be a true safety net during the pandemic.

Medicaid Expansion allows any eligible adult to enroll under the following criteria:

  • Aged 19 to 64 years old
  • Has a household income less than 138% of the federal poverty level
  • Doesn't already qualify for Medicaid or Medicare
  • Must meet citizenship requirement

This project aims to explore the differences in health insurance by county in Louisiana, comparing data from pre-Medicaid expansion to post-Medicaid expansion. As you can see in the picture above, although the parishes are similar in size by land area, they differ tremendously by population, wealth, races, income variation, political agendas, and so many more details.

We are aiming to explore the differences Medicaid expansion made on insurance rates.

Specifically:

How large of a difference did Medicaid expansion make on insurance rates?

Which features of the population played the largest role in determining their insurance rates?

How did the adoption of Medicaid expansion change the makeup of the insured and the uninsured populations in Louisiana?


Our datasets are both from the US Census Bureau, which acquired the data through community surveys that led to population estimates. These are from the Official US Government data, so this is the most reliable and accurate data out there. To explore differences in Medicaid expansion, we chose datasets from 2 different years, one pre-Medicaid expansion and one post-Medicaid expansion. The pre-Medicaid expansion data comes from 2015. The post-Medicaid expansion data comes from 2021. The 2021 data includes a portion of the total parishes in Louisiana, so we used the similar parishes from 2015.

The data collected represents an array of details about the population of each parish. This includes:

AGE: Separated into categories which represent minors, adults, and elderly persons.

SEX: Female vs Male (No option for non-binary persons)

RACE: Options for white, hispanic/latino, black, asian, hawaiian, or several races

LIVING ARRANGEMENTS: Options include a family household (married couple), only a male or female reference person, or a non-family household

NATIVITY AND US CITIZENSHIP STATUS: Native vs. foreign born, and if foreign born specifies if they are a citizen or not

DISABILITY STATUS: Specifies if the person is living with any disability

EDUCATIONAL ATTAINMENT: For persons over the age of 26, did they obtain less than a high school degree, a high school degree, some college or associate's degree, or bachelor's or higher

EMPLOYMENT STATUS: For population between ages 19-64, if in labor force specifies if they are employed

WORK EXPERIENCE: Specifies if in the last year, person worked full time, less than full time, or not at all

HOUSEHOLD INCOME: Total household population separated to categories, in 2021-inflation adjusted dollars

RATIO OF INCOME TO POVERTY LEVEL IN THE PAST 12 MONTHS: if below poverty line, where does the household stand in terms of percentage below that line

census.png

2. Data: Extraction, Transform, and Load

Extraction

We extracted our data from the US Census Bureau Website found at https://data.census.gov/ . The website has options for a plethora of surveys, as well as options for states, cities, counties, years, and a variety of topics. After finding the two datasets we chose to explore, we decided to upload these to google drive in order to retain the unchanged data. We upload these csvs to our analysis below.

In [2]:
from google.colab import drive
drive.mount('/content/drive')
!pip install censusdata
!pip install geopandas
%cd /content/drive/My Drive
!git clone https://github.com/rdeykin/CMPS_3160_Project.git
%cd CMPS_3160_Project/
!git pull
%cd Data/
Mounted at /content/drive
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Collecting censusdata
  Downloading CensusData-1.15.post1.tar.gz (26.6 MB)
     |████████████████████████████████| 26.6 MB 459 kB/s 
Requirement already satisfied: pandas in /usr/local/lib/python3.8/dist-packages (from censusdata) (1.3.5)
Requirement already satisfied: requests in /usr/local/lib/python3.8/dist-packages (from censusdata) (2.23.0)
Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.8/dist-packages (from pandas->censusdata) (2022.6)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.8/dist-packages (from pandas->censusdata) (2.8.2)
Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.8/dist-packages (from pandas->censusdata) (1.21.6)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil>=2.7.3->pandas->censusdata) (1.15.0)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests->censusdata) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests->censusdata) (2022.9.24)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests->censusdata) (1.24.3)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.8/dist-packages (from requests->censusdata) (3.0.4)
Building wheels for collected packages: censusdata
  Building wheel for censusdata (setup.py) ... done
  Created wheel for censusdata: filename=CensusData-1.15.post1-py3-none-any.whl size=28205763 sha256=23ce6648e0d96514c6378881744c1b3f4cc507c54ff3cfccbc12c38443b98138
  Stored in directory: /root/.cache/pip/wheels/7f/c9/9e/ec7a5e5967036ec8ed603065d5a1b122803476804bb065a5c7
Successfully built censusdata
Installing collected packages: censusdata
Successfully installed censusdata-1.15.post1
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Collecting geopandas
  Downloading geopandas-0.12.2-py3-none-any.whl (1.1 MB)
     |████████████████████████████████| 1.1 MB 5.1 MB/s 
Requirement already satisfied: shapely>=1.7 in /usr/local/lib/python3.8/dist-packages (from geopandas) (1.8.5.post1)
Collecting pyproj>=2.6.1.post1
  Downloading pyproj-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.8 MB)
     |████████████████████████████████| 7.8 MB 42.4 MB/s 
Requirement already satisfied: packaging in /usr/local/lib/python3.8/dist-packages (from geopandas) (21.3)
Requirement already satisfied: pandas>=1.0.0 in /usr/local/lib/python3.8/dist-packages (from geopandas) (1.3.5)
Collecting fiona>=1.8
  Downloading Fiona-1.8.22-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.6 MB)
     |████████████████████████████████| 16.6 MB 56.5 MB/s 
Requirement already satisfied: six>=1.7 in /usr/local/lib/python3.8/dist-packages (from fiona>=1.8->geopandas) (1.15.0)
Collecting munch
  Downloading munch-2.5.0-py2.py3-none-any.whl (10 kB)
Collecting cligj>=0.5
  Downloading cligj-0.7.2-py3-none-any.whl (7.1 kB)
Requirement already satisfied: attrs>=17 in /usr/local/lib/python3.8/dist-packages (from fiona>=1.8->geopandas) (22.1.0)
Collecting click-plugins>=1.0
  Downloading click_plugins-1.1.1-py2.py3-none-any.whl (7.5 kB)
Requirement already satisfied: certifi in /usr/local/lib/python3.8/dist-packages (from fiona>=1.8->geopandas) (2022.9.24)
Requirement already satisfied: click>=4.0 in /usr/local/lib/python3.8/dist-packages (from fiona>=1.8->geopandas) (7.1.2)
Requirement already satisfied: setuptools in /usr/local/lib/python3.8/dist-packages (from fiona>=1.8->geopandas) (57.4.0)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.8/dist-packages (from pandas>=1.0.0->geopandas) (2.8.2)
Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.8/dist-packages (from pandas>=1.0.0->geopandas) (2022.6)
Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.8/dist-packages (from pandas>=1.0.0->geopandas) (1.21.6)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.8/dist-packages (from packaging->geopandas) (3.0.9)
Installing collected packages: munch, cligj, click-plugins, pyproj, fiona, geopandas
Successfully installed click-plugins-1.1.1 cligj-0.7.2 fiona-1.8.22 geopandas-0.12.2 munch-2.5.0 pyproj-3.4.1
/content/drive/My Drive
fatal: destination path 'CMPS_3160_Project' already exists and is not an empty directory.
/content/drive/My Drive/CMPS_3160_Project
Already up to date.
/content/drive/My Drive/CMPS_3160_Project/Data
In [3]:
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import figure
import seaborn as sns
import censusdata
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier

Load

In [4]:
health21 = pd.read_csv("../Data/ACSST1Y2021.S2701-2022-10-10T235340.csv")
health15= pd.read_csv("../Data/ACSST1Y2015.S2701-2022-11-04T214721.csv")
In [5]:
health21.head
Out[5]:
<bound method NDFrame.head of                                      Label (Grouping)  \
0            Civilian noninstitutionalized population   
1                                                 AGE   
2                                       Under 6 years   
3                                       6 to 18 years   
4                                      19 to 25 years   
..                                                ...   
67          Civilian noninstitutionalized populati...   
68              Below 138 percent of the poverty t...   
69              138 to 399 percent of the poverty ...   
70              At or above 400 percent of the pov...   
71              Below 100 percent of the poverty t...   

   Ascension Parish, Louisiana!!Total!!Estimate  \
0                                       127,526   
1                                           NaN   
2                                        11,433   
3                                        23,717   
4                                         9,614   
..                                          ...   
67                                      127,341   
68                                       22,612   
69                                       50,030   
70                                       54,699   
71                                       15,268   

   Ascension Parish, Louisiana!!Insured!!Estimate  \
0                                         118,592   
1                                             NaN   
2                                          10,915   
3                                          22,919   
4                                           8,961   
..                                            ...   
67                                        118,407   
68                                         20,598   
69                                         44,468   
70                                         53,341   
71                                         13,254   

   Ascension Parish, Louisiana!!Percent Insured!!Estimate  \
0                                               93.0%       
1                                                 NaN       
2                                               95.5%       
3                                               96.6%       
4                                               93.2%       
..                                                ...       
67                                              93.0%       
68                                              91.1%       
69                                              88.9%       
70                                              97.5%       
71                                              86.8%       

   Ascension Parish, Louisiana!!Uninsured!!Estimate  \
0                                             8,934   
1                                               NaN   
2                                               518   
3                                               798   
4                                               653   
..                                              ...   
67                                            8,934   
68                                            2,014   
69                                            5,562   
70                                            1,358   
71                                            2,014   

   Ascension Parish, Louisiana!!Percent Uninsured!!Estimate  \
0                                                7.0%         
1                                                 NaN         
2                                                4.5%         
3                                                3.4%         
4                                                6.8%         
..                                                ...         
67                                               7.0%         
68                                               8.9%         
69                                              11.1%         
70                                               2.5%         
71                                              13.2%         

   Bossier Parish, Louisiana!!Total!!Estimate  \
0                                     121,855   
1                                         NaN   
2                                       9,507   
3                                      24,343   
4                                      11,334   
..                                        ...   
67                                    121,371   
68                                     28,139   
69                                     48,735   
70                                     44,497   
71                                     21,455   

   Bossier Parish, Louisiana!!Insured!!Estimate  \
0                                       110,390   
1                                           NaN   
2                                         9,410   
3                                        23,262   
4                                         9,078   
..                                          ...   
67                                      109,906   
68                                       23,694   
69                                       43,812   
70                                       42,400   
71                                       17,349   

   Bossier Parish, Louisiana!!Percent Insured!!Estimate  \
0                                               90.6%     
1                                                 NaN     
2                                               99.0%     
3                                               95.6%     
4                                               80.1%     
..                                                ...     
67                                              90.6%     
68                                              84.2%     
69                                              89.9%     
70                                              95.3%     
71                                              80.9%     

   Bossier Parish, Louisiana!!Uninsured!!Estimate  ...  \
0                                          11,465  ...   
1                                             NaN  ...   
2                                              97  ...   
3                                           1,081  ...   
4                                           2,256  ...   
..                                            ...  ...   
67                                         11,465  ...   
68                                          4,445  ...   
69                                          4,923  ...   
70                                          2,097  ...   
71                                          4,106  ...   

   Terrebonne Parish, Louisiana!!Total!!Estimate  \
0                                        106,880   
1                                            NaN   
2                                          8,716   
3                                         19,956   
4                                          6,878   
..                                           ...   
67                                       106,647   
68                                        18,191   
69                                        52,544   
70                                        35,912   
71                                        15,606   

   Terrebonne Parish, Louisiana!!Insured!!Estimate  \
0                                           99,977   
1                                              NaN   
2                                            8,324   
3                                           19,614   
4                                            5,536   
..                                             ...   
67                                          99,744   
68                                          15,927   
69                                          49,318   
70                                          34,499   
71                                          13,540   

   Terrebonne Parish, Louisiana!!Percent Insured!!Estimate  \
0                                               93.5%        
1                                                 NaN        
2                                               95.5%        
3                                               98.3%        
4                                               80.5%        
..                                                ...        
67                                              93.5%        
68                                              87.6%        
69                                              93.9%        
70                                              96.1%        
71                                              86.8%        

   Terrebonne Parish, Louisiana!!Uninsured!!Estimate  \
0                                              6,903   
1                                                NaN   
2                                                392   
3                                                342   
4                                              1,342   
..                                               ...   
67                                             6,903   
68                                             2,264   
69                                             3,226   
70                                             1,413   
71                                             2,066   

   Terrebonne Parish, Louisiana!!Percent Uninsured!!Estimate  \
0                                                6.5%          
1                                                 NaN          
2                                                4.5%          
3                                                1.7%          
4                                               19.5%          
..                                                ...          
67                                               6.5%          
68                                              12.4%          
69                                               6.1%          
70                                               3.9%          
71                                              13.2%          

   United States!!Total!!Estimate United States!!Insured!!Estimate  \
0                     326,912,547                      298,685,665   
1                             NaN                              NaN   
2                      22,579,171                       21,565,200   
3                      55,251,332                       52,100,615   
4                      29,194,212                       25,059,158   
..                            ...                              ...   
67                    323,173,982                      295,171,921   
68                     59,917,950                       50,962,094   
69                    127,403,787                      113,526,496   
70                    135,852,245                      130,683,331   
71                     41,362,026                       35,025,846   

   United States!!Percent Insured!!Estimate  \
0                                     91.4%   
1                                       NaN   
2                                     95.5%   
3                                     94.3%   
4                                     85.8%   
..                                      ...   
67                                    91.3%   
68                                    85.1%   
69                                    89.1%   
70                                    96.2%   
71                                    84.7%   

   United States!!Uninsured!!Estimate  \
0                          28,226,882   
1                                 NaN   
2                           1,013,971   
3                           3,150,717   
4                           4,135,054   
..                                ...   
67                         28,002,061   
68                          8,955,856   
69                         13,877,291   
70                          5,168,914   
71                          6,336,180   

   United States!!Percent Uninsured!!Estimate  
0                                        8.6%  
1                                         NaN  
2                                        4.5%  
3                                        5.7%  
4                                       14.2%  
..                                        ...  
67                                       8.7%  
68                                      14.9%  
69                                      10.9%  
70                                       3.8%  
71                                      15.3%  

[72 rows x 91 columns]>
In [6]:
health15.head
Out[6]:
<bound method NDFrame.head of                                      Label (Grouping)  \
0            Civilian noninstitutionalized population   
1                                                 AGE   
2                                      Under 18 years   
3                                       Under 6 years   
4                                       6 to 17 years   
..                                                ...   
68      Civilian noninstitutionalized population f...   
69          Below 138 percent of the poverty thres...   
70          138 to 199 percent of the poverty thre...   
71          200 to 399 percent of the poverty thre...   
72          At or above 400 percent of the poverty...   

   Ascension Parish, Louisiana!!Total!!Estimate  \
0                                       118,671   
1                                           NaN   
2                                        32,907   
3                                        10,276   
4                                        22,631   
..                                          ...   
68                                      118,671   
69                                       16,267   
70                                       10,934   
71                                       33,430   
72                                       58,040   

   Ascension Parish, Louisiana!!Total!!Margin of Error  \
0                                                ±986    
1                                                 NaN    
2                                                  ±8    
3                                                ±904    
4                                                ±904    
..                                                ...    
68                                               ±986    
69                                             ±3,751    
70                                             ±3,335    
71                                             ±5,773    
72                                             ±5,698    

   Ascension Parish, Louisiana!!Insured!!Estimate  \
0                                         110,276   
1                                             NaN   
2                                          32,746   
3                                          10,219   
4                                          22,527   
..                                            ...   
68                                        110,276   
69                                         13,047   
70                                          9,296   
71                                         30,567   
72                                         57,366   

   Ascension Parish, Louisiana!!Insured!!Margin of Error  \
0                                              ±2,362      
1                                                 NaN      
2                                                ±215      
3                                                ±894      
4                                                ±925      
..                                                ...      
68                                             ±2,362      
69                                             ±3,366      
70                                             ±3,035      
71                                             ±5,460      
72                                             ±5,703      

   Ascension Parish, Louisiana!!Percent Insured!!Estimate  \
0                                               92.9%       
1                                                 NaN       
2                                               99.5%       
3                                               99.4%       
4                                               99.5%       
..                                                ...       
68                                              92.9%       
69                                              80.2%       
70                                              85.0%       
71                                              91.4%       
72                                              98.8%       

   Ascension Parish, Louisiana!!Percent Insured!!Margin of Error  \
0                                                ±1.8              
1                                                 NaN              
2                                                ±0.7              
3                                                ±1.0              
4                                                ±0.6              
..                                                ...              
68                                               ±1.8              
69                                               ±8.2              
70                                               ±6.6              
71                                               ±3.2              
72                                               ±0.8              

   Ascension Parish, Louisiana!!Uninsured!!Estimate  \
0                                             8,395   
1                                               NaN   
2                                               161   
3                                                57   
4                                               104   
..                                              ...   
68                                            8,395   
69                                            3,220   
70                                            1,638   
71                                            2,863   
72                                              674   

   Ascension Parish, Louisiana!!Uninsured!!Margin of Error  \
0                                              ±2,132        
1                                                 NaN        
2                                                ±214        
3                                                ±103        
4                                                ±125        
..                                                ...        
68                                             ±2,132        
69                                             ±1,473        
70                                               ±805        
71                                             ±1,170        
72                                               ±478        

   Ascension Parish, Louisiana!!Percent Uninsured!!Estimate  ...  \
0                                                7.1%        ...   
1                                                 NaN        ...   
2                                                0.5%        ...   
3                                                0.6%        ...   
4                                                0.5%        ...   
..                                                ...        ...   
68                                               7.1%        ...   
69                                              19.8%        ...   
70                                              15.0%        ...   
71                                               8.6%        ...   
72                                               1.2%        ...   

   United States!!Total!!Estimate United States!!Total!!Margin of Error  \
0                     316,450,569                               ±15,477   
1                             NaN                                   NaN   
2                      73,491,931                               ±34,195   
3                      23,746,599                               ±37,579   
4                      49,745,332                               ±42,965   
..                            ...                                   ...   
68                    312,780,720                               ±26,621   
69                     68,091,759                              ±307,738   
70                     35,237,726                              ±166,546   
71                     93,261,064                              ±212,246   
72                    116,190,171                              ±335,005   

   United States!!Insured!!Estimate United States!!Insured!!Margin of Error  \
0                       286,693,025                                ±176,296   
1                               NaN                                     NaN   
2                        69,957,946                                 ±47,887   
3                        22,795,315                                 ±39,871   
4                        47,162,631                                 ±50,218   
..                              ...                                     ...   
68                      283,223,843                                ±176,814   
69                       56,399,632                                ±246,139   
70                       29,999,621                                ±151,647   
71                       84,506,859                                ±207,622   
72                      112,317,731                                ±335,702   

   United States!!Percent Insured!!Estimate  \
0                                     90.6%   
1                                       NaN   
2                                     95.2%   
3                                     96.0%   
4                                     94.8%   
..                                      ...   
68                                    90.6%   
69                                    82.8%   
70                                    85.1%   
71                                    90.6%   
72                                    96.7%   

   United States!!Percent Insured!!Margin of Error  \
0                                             ±0.1   
1                                              NaN   
2                                             ±0.1   
3                                             ±0.1   
4                                             ±0.1   
..                                             ...   
68                                            ±0.1   
69                                            ±0.1   
70                                            ±0.2   
71                                            ±0.1   
72                                            ±0.1   

   United States!!Uninsured!!Estimate  \
0                          29,757,544   
1                                 NaN   
2                           3,533,985   
3                             951,284   
4                           2,582,701   
..                                ...   
68                         29,556,877   
69                         11,692,127   
70                          5,238,105   
71                          8,754,205   
72                          3,872,440   

   United States!!Uninsured!!Margin of Error  \
0                                   ±179,363   
1                                        NaN   
2                                    ±46,354   
3                                    ±20,303   
4                                    ±37,325   
..                                       ...   
68                                  ±179,611   
69                                  ±102,395   
70                                   ±58,540   
71                                   ±84,685   
72                                   ±52,249   

   United States!!Percent Uninsured!!Estimate  \
0                                        9.4%   
1                                         NaN   
2                                        4.8%   
3                                        4.0%   
4                                        5.2%   
..                                        ...   
68                                       9.4%   
69                                      17.2%   
70                                      14.9%   
71                                       9.4%   
72                                       3.3%   

   United States!!Percent Uninsured!!Margin of Error  
0                                               ±0.1  
1                                                NaN  
2                                               ±0.1  
3                                               ±0.1  
4                                               ±0.1  
..                                               ...  
68                                              ±0.1  
69                                              ±0.1  
70                                              ±0.2  
71                                              ±0.1  
72                                              ±0.1  

[73 rows x 181 columns]>

As you can tell, these datasets have some odd numbers and characters that need to be dropped. Here we begin our analysis of the health insurance datasets. We start by dropping the nonfunctional headers, then renaming the columns.

Transform

In [7]:
health15.drop(health15.filter(like="Margin"),axis=1,inplace=True)
#dropping the margin of error columns, unnecessary for our analysis
In [8]:
health21.drop(labels=[1,14,17,27,34,39,42,48,54,59,66],axis=0,inplace=True)
health15.drop(labels=[1,15,18,28,35,40,43,49,55,60,67],axis=0,inplace=True)
# dropping unusable columns, mostly titles such as AGE or RACE titles
In [9]:
health21=health21.rename(columns={'Label (Grouping)': 'Label',
                                                'Ascension Parish, Louisiana!!Total!!Estimate':"Ascension Total",
                                                'Ascension Parish, Louisiana!!Insured!!Estimate': 'Ascension Insured',
                                                'Ascension Parish, Louisiana!!Percent Insured!!Estimate': 'Ascension Insured %',
                                                'Ascension Parish, Louisiana!!Uninsured!!Estimate': 'Ascension Uninsured',
                                                'Ascension Parish, Louisiana!!Percent Uninsured!!Estimate': 'Ascension Uninsured %',
                                                'Bossier Parish, Louisiana!!Total!!Estimate':"Bossier Total",
                                                'Bossier Parish, Louisiana!!Insured!!Estimate': 'Bossier Insured',
                                                'Bossier Parish, Louisiana!!Percent Insured!!Estimate': 'Bossier Insured %',
                                                'Bossier Parish, Louisiana!!Uninsured!!Estimate': 'Bossier Uninsured',
                                                'Bossier Parish, Louisiana!!Percent Uninsured!!Estimate': 'Bossier Uninsured %',
                                                'Caddo Parish, Louisiana!!Total!!Estimate':"Caddo Total",
                                                'Caddo Parish, Louisiana!!Insured!!Estimate': 'Caddo Insured',
                                                'Caddo Parish, Louisiana!!Percent Insured!!Estimate': 'Caddo Insured %',
                                                'Caddo Parish, Louisiana!!Uninsured!!Estimate': 'Caddo Uninsured',
                                                'Caddo Parish, Louisiana!!Percent Uninsured!!Estimate': 'Caddo Uninsured %',
                                                'Calcasieu Parish, Louisiana!!Total!!Estimate':"Calcasieu Total",
                                                'Calcasieu Parish, Louisiana!!Insured!!Estimate': 'Calcasieu Insured',
                                                'Calcasieu Parish, Louisiana!!Percent Insured!!Estimate': 'Calcasieu Insured %',
                                                'Calcasieu Parish, Louisiana!!Uninsured!!Estimate': 'Calcasieu Uninsured',
                                                'Calcasieu Parish, Louisiana!!Percent Uninsured!!Estimate': 'Calcasieu Uninsured %',
                                                'East Baton Rouge Parish, Louisiana!!Total!!Estimate':"East Baton Rouge Total",
                                                'East Baton Rouge Parish, Louisiana!!Insured!!Estimate': 'East Baton Rouge Insured',
                                                'East Baton Rouge Parish, Louisiana!!Percent Insured!!Estimate': 'East Baton Rouge Insured %',
                                                'East Baton Rouge Parish, Louisiana!!Uninsured!!Estimate': 'East Baton Rougen Uninsured',
                                                'East Baton Rouge Parish, Louisiana!!Percent Uninsured!!Estimate': 'East Baton Rouge Uninsured %',
                                                'Iberia Parish, Louisiana!!Total!!Estimate':"Iberia Total",
                                                'Iberia Parish, Louisiana!!Insured!!Estimate': 'Iberia Insured',
                                                'Iberia Parish, Louisiana!!Percent Insured!!Estimate': 'Iberia Insured %',
                                                'Iberia Parish, Louisiana!!Uninsured!!Estimate': 'Iberia Uninsured',
                                                'Iberia Parish, Louisiana!!Percent Uninsured!!Estimate': 'Iberia Uninsured %',
                                                'Jefferson Parish, Louisiana!!Total!!Estimate':"Jefferson Total",
                                                'Jefferson Parish, Louisiana!!Insured!!Estimate': 'Jefferson Insured',
                                                'Jefferson Parish, Louisiana!!Percent Insured!!Estimate': 'Jefferson Insured %',
                                                'Jefferson Parish, Louisiana!!Uninsured!!Estimate': 'Jefferson Uninsured',
                                                'Jefferson Parish, Louisiana!!Percent Uninsured!!Estimate': 'Jefferson Uninsured %',
                                                'Lafayette Parish, Louisiana!!Total!!Estimate':"Lafayette Total",
                                                'Lafayette Parish, Louisiana!!Insured!!Estimate': 'Lafayette Insured',
                                                'Lafayette Parish, Louisiana!!Percent Insured!!Estimate': 'Lafayette Insured %',
                                                'Lafayette Parish, Louisiana!!Uninsured!!Estimate': 'Lafayette Uninsured',
                                                'Lafayette Parish, Louisiana!!Percent Uninsured!!Estimate': 'Lafayette Uninsured %',
                                                'Lafourche Parish, Louisiana!!Total!!Estimate':"Lafourche Total",
                                                'Lafourche Parish, Louisiana!!Insured!!Estimate': 'Lafourche Insured',
                                                'Lafourche Parish, Louisiana!!Percent Insured!!Estimate': 'Lafourche Insured %',
                                                'Lafourche Parish, Louisiana!!Uninsured!!Estimate': 'Lafourche Uninsured',
                                                'Lafourche Parish, Louisiana!!Percent Uninsured!!Estimate': 'Lafourche Uninsured %',
                                                'Livingston Parish, Louisiana!!Total!!Estimate':"Livingston Total",
                                                'Livingston Parish, Louisiana!!Insured!!Estimate': 'Livingston Insured',
                                                'Livingston Parish, Louisiana!!Percent Insured!!Estimate': 'Livingston Insured %',
                                                'Livingston Parish, Louisiana!!Uninsured!!Estimate': 'Livingston Uninsured',
                                                'Livingston Parish, Louisiana!!Percent Uninsured!!Estimate': 'Livingston Uninsured %',
                                                'Orleans Parish, Louisiana!!Total!!Estimate':"Orleans Total",
                                                'Orleans Parish, Louisiana!!Insured!!Estimate': 'Orleans Insured',
                                                'Orleans Parish, Louisiana!!Percent Insured!!Estimate': 'Orleans Insured %',
                                                'Orleans Parish, Louisiana!!Uninsured!!Estimate': 'Orleans Uninsured',
                                                'Orleans Parish, Louisiana!!Percent Uninsured!!Estimate': 'Orleans Uninsured %',
                                                'Ouachita Parish, Louisiana!!Total!!Estimate':"Ouachita Total",
                                                'Ouachita Parish, Louisiana!!Insured!!Estimate': 'Ouachita Insured',
                                                'Ouachita Parish, Louisiana!!Percent Insured!!Estimate': 'Ouachita Insured %',
                                                'Ouachita Parish, Louisiana!!Uninsured!!Estimate': 'Ouachita Uninsured',
                                                'Ouachita Parish, Louisiana!!Percent Uninsured!!Estimate': 'Ouachita Uninsured %',
                                                'Rapides Parish, Louisiana!!Total!!Estimate':"Rapides Total",
                                                'Rapides Parish, Louisiana!!Insured!!Estimate': 'Rapides Insured',
                                                'Rapides Parish, Louisiana!!Percent Insured!!Estimate': 'Rapides Insured %',
                                                'Rapides Parish, Louisiana!!Uninsured!!Estimate': 'Rapides Uninsured',
                                                'Rapides Parish, Louisiana!!Percent Uninsured!!Estimate': 'Rapides Uninsured %',
                                                'St. Landry Parish, Louisiana!!Total!!Estimate':"St. Landry Total",
                                                'St. Landry Parish, Louisiana!!Insured!!Estimate': 'St. Landry Insured',
                                                'St. Landry Parish, Louisiana!!Percent Insured!!Estimate': 'St. Landry Insured %',
                                                'St. Landry Parish, Louisiana!!Uninsured!!Estimate': 'St. Landry Uninsured',
                                                'St. Landry Parish, Louisiana!!Percent Uninsured!!Estimate': 'St. Landry Uninsured %',
                                                'St. Tammany Parish, Louisiana!!Total!!Estimate':"St. Tammany Total",
                                                'St. Tammany Parish, Louisiana!!Insured!!Estimate': 'St. Tammany Insured',
                                                'St. Tammany Parish, Louisiana!!Percent Insured!!Estimate': 'St. Tammany Insured %',
                                                'St. Tammany Parish, Louisiana!!Uninsured!!Estimate': 'St. Tammany Uninsured',
                                                'St. Tammany Parish, Louisiana!!Percent Uninsured!!Estimate': 'St. Tammany Uninsured %',
                                                'Tangipahoa Parish, Louisiana!!Total!!Estimate':"Tangipahoa Total",
                                                'Tangipahoa Parish, Louisiana!!Insured!!Estimate': 'Tangipahoa Insured',
                                                'Tangipahoa Parish, Louisiana!!Percent Insured!!Estimate': 'Tangipahoa Insured %',
                                                'Tangipahoa Parish, Louisiana!!Uninsured!!Estimate': 'Tangipahoa Uninsured',
                                                'Tangipahoa Parish, Louisiana!!Percent Uninsured!!Estimate': 'Tangipahoa Uninsured %',
                                                'Terrebonne Parish, Louisiana!!Total!!Estimate':"Terrebonne Total",
                                                'Terrebonne Parish, Louisiana!!Insured!!Estimate': 'Terrebonne Insured',
                                                'Terrebonne Parish, Louisiana!!Percent Insured!!Estimate': 'Terrebonne Insured %',
                                                'Terrebonne Parish, Louisiana!!Uninsured!!Estimate': 'Terrebonne Uninsured',
                                                'Terrebonne Parish, Louisiana!!Percent Uninsured!!Estimate': 'Terrebonne Uninsured %',
                                                'United States!!Total!!Estimate':"US Total",
                                                'United States!!Insured!!Estimate': 'US Insured',
                                                'United States!!Percent Insured!!Estimate': 'US Insured %',
                                                'United States!!Uninsured!!Estimate': 'US Uninsured',
                                                'United States!!Percent Uninsured!!Estimate': 'US Uninsured %'})
In [10]:
health15=health15.rename(columns={'Label (Grouping)': 'Label',
                                                'Ascension Parish, Louisiana!!Total!!Estimate':"Ascension Total",
                                                'Ascension Parish, Louisiana!!Insured!!Estimate': 'Ascension Insured',
                                                'Ascension Parish, Louisiana!!Percent Insured!!Estimate': 'Ascension Insured %',
                                                'Ascension Parish, Louisiana!!Uninsured!!Estimate': 'Ascension Uninsured',
                                                'Ascension Parish, Louisiana!!Percent Uninsured!!Estimate': 'Ascension Uninsured %',
                                                'Bossier Parish, Louisiana!!Total!!Estimate':"Bossier Total",
                                                'Bossier Parish, Louisiana!!Insured!!Estimate': 'Bossier Insured',
                                                'Bossier Parish, Louisiana!!Percent Insured!!Estimate': 'Bossier Insured %',
                                                'Bossier Parish, Louisiana!!Uninsured!!Estimate': 'Bossier Uninsured',
                                                'Bossier Parish, Louisiana!!Percent Uninsured!!Estimate': 'Bossier Uninsured %',
                                                'Caddo Parish, Louisiana!!Total!!Estimate':"Caddo Total",
                                                'Caddo Parish, Louisiana!!Insured!!Estimate': 'Caddo Insured',
                                                'Caddo Parish, Louisiana!!Percent Insured!!Estimate': 'Caddo Insured %',
                                                'Caddo Parish, Louisiana!!Uninsured!!Estimate': 'Caddo Uninsured',
                                                'Caddo Parish, Louisiana!!Percent Uninsured!!Estimate': 'Caddo Uninsured %',
                                                'Calcasieu Parish, Louisiana!!Total!!Estimate':"Calcasieu Total",
                                                'Calcasieu Parish, Louisiana!!Insured!!Estimate': 'Calcasieu Insured',
                                                'Calcasieu Parish, Louisiana!!Percent Insured!!Estimate': 'Calcasieu Insured %',
                                                'Calcasieu Parish, Louisiana!!Uninsured!!Estimate': 'Calcasieu Uninsured',
                                                'Calcasieu Parish, Louisiana!!Percent Uninsured!!Estimate': 'Calcasieu Uninsured %',
                                                'East Baton Rouge Parish, Louisiana!!Total!!Estimate':"East Baton Rouge Total",
                                                'East Baton Rouge Parish, Louisiana!!Insured!!Estimate': 'East Baton Rouge Insured',
                                                'East Baton Rouge Parish, Louisiana!!Percent Insured!!Estimate': 'East Baton Rouge Insured %',
                                                'East Baton Rouge Parish, Louisiana!!Uninsured!!Estimate': 'East Baton Rougen Uninsured',
                                                'East Baton Rouge Parish, Louisiana!!Percent Uninsured!!Estimate': 'East Baton Rouge Uninsured %',
                                                'Iberia Parish, Louisiana!!Total!!Estimate':"Iberia Total",
                                                'Iberia Parish, Louisiana!!Insured!!Estimate': 'Iberia Insured',
                                                'Iberia Parish, Louisiana!!Percent Insured!!Estimate': 'Iberia Insured %',
                                                'Iberia Parish, Louisiana!!Uninsured!!Estimate': 'Iberia Uninsured',
                                                'Iberia Parish, Louisiana!!Percent Uninsured!!Estimate': 'Iberia Uninsured %',
                                                'Jefferson Parish, Louisiana!!Total!!Estimate':"Jefferson Total",
                                                'Jefferson Parish, Louisiana!!Insured!!Estimate': 'Jefferson Insured',
                                                'Jefferson Parish, Louisiana!!Percent Insured!!Estimate': 'Jefferson Insured %',
                                                'Jefferson Parish, Louisiana!!Uninsured!!Estimate': 'Jefferson Uninsured',
                                                'Jefferson Parish, Louisiana!!Percent Uninsured!!Estimate': 'Jefferson Uninsured %',
                                                'Lafayette Parish, Louisiana!!Total!!Estimate':"Lafayette Total",
                                                'Lafayette Parish, Louisiana!!Insured!!Estimate': 'Lafayette Insured',
                                                'Lafayette Parish, Louisiana!!Percent Insured!!Estimate': 'Lafayette Insured %',
                                                'Lafayette Parish, Louisiana!!Uninsured!!Estimate': 'Lafayette Uninsured',
                                                'Lafayette Parish, Louisiana!!Percent Uninsured!!Estimate': 'Lafayette Uninsured %',
                                                'Lafourche Parish, Louisiana!!Total!!Estimate':"Lafourche Total",
                                                'Lafourche Parish, Louisiana!!Insured!!Estimate': 'Lafourche Insured',
                                                'Lafourche Parish, Louisiana!!Percent Insured!!Estimate': 'Lafourche Insured %',
                                                'Lafourche Parish, Louisiana!!Uninsured!!Estimate': 'Lafourche Uninsured',
                                                'Lafourche Parish, Louisiana!!Percent Uninsured!!Estimate': 'Lafourche Uninsured %',
                                                'Livingston Parish, Louisiana!!Total!!Estimate':"Livingston Total",
                                                'Livingston Parish, Louisiana!!Insured!!Estimate': 'Livingston Insured',
                                                'Livingston Parish, Louisiana!!Percent Insured!!Estimate': 'Livingston Insured %',
                                                'Livingston Parish, Louisiana!!Uninsured!!Estimate': 'Livingston Uninsured',
                                                'Livingston Parish, Louisiana!!Percent Uninsured!!Estimate': 'Livingston Uninsured %',
                                                'Orleans Parish, Louisiana!!Total!!Estimate':"Orleans Total",
                                                'Orleans Parish, Louisiana!!Insured!!Estimate': 'Orleans Insured',
                                                'Orleans Parish, Louisiana!!Percent Insured!!Estimate': 'Orleans Insured %',
                                                'Orleans Parish, Louisiana!!Uninsured!!Estimate': 'Orleans Uninsured',
                                                'Orleans Parish, Louisiana!!Percent Uninsured!!Estimate': 'Orleans Uninsured %',
                                                'Ouachita Parish, Louisiana!!Total!!Estimate':"Ouachita Total",
                                                'Ouachita Parish, Louisiana!!Insured!!Estimate': 'Ouachita Insured',
                                                'Ouachita Parish, Louisiana!!Percent Insured!!Estimate': 'Ouachita Insured %',
                                                'Ouachita Parish, Louisiana!!Uninsured!!Estimate': 'Ouachita Uninsured',
                                                'Ouachita Parish, Louisiana!!Percent Uninsured!!Estimate': 'Ouachita Uninsured %',
                                                'Rapides Parish, Louisiana!!Total!!Estimate':"Rapides Total",
                                                'Rapides Parish, Louisiana!!Insured!!Estimate': 'Rapides Insured',
                                                'Rapides Parish, Louisiana!!Percent Insured!!Estimate': 'Rapides Insured %',
                                                'Rapides Parish, Louisiana!!Uninsured!!Estimate': 'Rapides Uninsured',
                                                'Rapides Parish, Louisiana!!Percent Uninsured!!Estimate': 'Rapides Uninsured %',
                                                'St. Landry Parish, Louisiana!!Total!!Estimate':"St. Landry Total",
                                                'St. Landry Parish, Louisiana!!Insured!!Estimate': 'St. Landry Insured',
                                                'St. Landry Parish, Louisiana!!Percent Insured!!Estimate': 'St. Landry Insured %',
                                                'St. Landry Parish, Louisiana!!Uninsured!!Estimate': 'St. Landry Uninsured',
                                                'St. Landry Parish, Louisiana!!Percent Uninsured!!Estimate': 'St. Landry Uninsured %',
                                                'St. Tammany Parish, Louisiana!!Total!!Estimate':"St. Tammany Total",
                                                'St. Tammany Parish, Louisiana!!Insured!!Estimate': 'St. Tammany Insured',
                                                'St. Tammany Parish, Louisiana!!Percent Insured!!Estimate': 'St. Tammany Insured %',
                                                'St. Tammany Parish, Louisiana!!Uninsured!!Estimate': 'St. Tammany Uninsured',
                                                'St. Tammany Parish, Louisiana!!Percent Uninsured!!Estimate': 'St. Tammany Uninsured %',
                                                'Tangipahoa Parish, Louisiana!!Total!!Estimate':"Tangipahoa Total",
                                                'Tangipahoa Parish, Louisiana!!Insured!!Estimate': 'Tangipahoa Insured',
                                                'Tangipahoa Parish, Louisiana!!Percent Insured!!Estimate': 'Tangipahoa Insured %',
                                                'Tangipahoa Parish, Louisiana!!Uninsured!!Estimate': 'Tangipahoa Uninsured',
                                                'Tangipahoa Parish, Louisiana!!Percent Uninsured!!Estimate': 'Tangipahoa Uninsured %',
                                                'Terrebonne Parish, Louisiana!!Total!!Estimate':"Terrebonne Total",
                                                'Terrebonne Parish, Louisiana!!Insured!!Estimate': 'Terrebonne Insured',
                                                'Terrebonne Parish, Louisiana!!Percent Insured!!Estimate': 'Terrebonne Insured %',
                                                'Terrebonne Parish, Louisiana!!Uninsured!!Estimate': 'Terrebonne Uninsured',
                                                'Terrebonne Parish, Louisiana!!Percent Uninsured!!Estimate': 'Terrebonne Uninsured %',
                                                'United States!!Total!!Estimate':"US Total",
                                                'United States!!Insured!!Estimate': 'US Insured',
                                                'United States!!Percent Insured!!Estimate': 'US Insured %',
                                                'United States!!Uninsured!!Estimate': 'US Uninsured',
                                                'United States!!Percent Uninsured!!Estimate': 'US Uninsured %'})

Next, we rename the rows which are not appropriately labeled.

In [11]:
health21
Out[11]:
Label Ascension Total Ascension Insured Ascension Insured % Ascension Uninsured Ascension Uninsured % Bossier Total Bossier Insured Bossier Insured % Bossier Uninsured ... Terrebonne Total Terrebonne Insured Terrebonne Insured % Terrebonne Uninsured Terrebonne Uninsured % US Total US Insured US Insured % US Uninsured US Uninsured %
0 Civilian noninstitutionalized population 127,526 118,592 93.0% 8,934 7.0% 121,855 110,390 90.6% 11,465 ... 106,880 99,977 93.5% 6,903 6.5% 326,912,547 298,685,665 91.4% 28,226,882 8.6%
2 Under 6 years 11,433 10,915 95.5% 518 4.5% 9,507 9,410 99.0% 97 ... 8,716 8,324 95.5% 392 4.5% 22,579,171 21,565,200 95.5% 1,013,971 4.5%
3 6 to 18 years 23,717 22,919 96.6% 798 3.4% 24,343 23,262 95.6% 1,081 ... 19,956 19,614 98.3% 342 1.7% 55,251,332 52,100,615 94.3% 3,150,717 5.7%
4 19 to 25 years 9,614 8,961 93.2% 653 6.8% 11,334 9,078 80.1% 2,256 ... 6,878 5,536 80.5% 1,342 19.5% 29,194,212 25,059,158 85.8% 4,135,054 14.2%
5 26 to 34 years 16,625 14,029 84.4% 2,596 15.6% 12,725 9,942 78.1% 2,783 ... 13,308 11,664 87.6% 1,644 12.4% 39,736,024 33,724,063 84.9% 6,011,961 15.1%
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
67 Civilian noninstitutionalized populati... 127,341 118,407 93.0% 8,934 7.0% 121,371 109,906 90.6% 11,465 ... 106,647 99,744 93.5% 6,903 6.5% 323,173,982 295,171,921 91.3% 28,002,061 8.7%
68 Below 138 percent of the poverty t... 22,612 20,598 91.1% 2,014 8.9% 28,139 23,694 84.2% 4,445 ... 18,191 15,927 87.6% 2,264 12.4% 59,917,950 50,962,094 85.1% 8,955,856 14.9%
69 138 to 399 percent of the poverty ... 50,030 44,468 88.9% 5,562 11.1% 48,735 43,812 89.9% 4,923 ... 52,544 49,318 93.9% 3,226 6.1% 127,403,787 113,526,496 89.1% 13,877,291 10.9%
70 At or above 400 percent of the pov... 54,699 53,341 97.5% 1,358 2.5% 44,497 42,400 95.3% 2,097 ... 35,912 34,499 96.1% 1,413 3.9% 135,852,245 130,683,331 96.2% 5,168,914 3.8%
71 Below 100 percent of the poverty t... 15,268 13,254 86.8% 2,014 13.2% 21,455 17,349 80.9% 4,106 ... 15,606 13,540 86.8% 2,066 13.2% 41,362,026 35,025,846 84.7% 6,336,180 15.3%

61 rows × 91 columns

In [12]:
health15
Out[12]:
Label Ascension Total Ascension Insured Ascension Insured % Ascension Uninsured Ascension Uninsured % Bossier Total Bossier Insured Bossier Insured % Bossier Uninsured ... Terrebonne Total Terrebonne Insured Terrebonne Insured % Terrebonne Uninsured Terrebonne Uninsured % US Total US Insured US Insured % US Uninsured US Uninsured %
0 Civilian noninstitutionalized population 118,671 110,276 92.9% 8,395 7.1% 119,348 107,351 89.9% 11,997 ... 112,565 93,917 83.4% 18,648 16.6% 316,450,569 286,693,025 90.6% 29,757,544 9.4%
2 Under 18 years 32,907 32,746 99.5% 161 0.5% 31,372 30,833 98.3% 539 ... 30,137 27,497 91.2% 2,640 8.8% 73,491,931 69,957,946 95.2% 3,533,985 4.8%
3 Under 6 years 10,276 10,219 99.4% 57 0.6% 10,475 10,080 96.2% 395 ... 9,875 9,157 92.7% 718 7.3% 23,746,599 22,795,315 96.0% 951,284 4.0%
4 6 to 17 years 22,631 22,527 99.5% 104 0.5% 20,897 20,753 99.3% 144 ... 20,262 18,340 90.5% 1,922 9.5% 49,745,332 47,162,631 94.8% 2,582,701 5.2%
5 18 to 64 years 73,652 65,423 88.8% 8,229 11.2% 72,469 61,011 84.2% 11,458 ... 68,554 52,679 76.8% 15,875 23.2% 196,521,616 170,690,058 86.9% 25,831,558 13.1%
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
68 Civilian noninstitutionalized population f... 118,671 110,276 92.9% 8,395 7.1% 119,173 107,176 89.9% 11,997 ... 112,130 93,482 83.4% 18,648 16.6% 312,780,720 283,223,843 90.6% 29,556,877 9.4%
69 Below 138 percent of the poverty thres... 16,267 13,047 80.2% 3,220 19.8% 24,916 20,348 81.7% 4,568 ... 33,601 22,943 68.3% 10,658 31.7% 68,091,759 56,399,632 82.8% 11,692,127 17.2%
70 138 to 199 percent of the poverty thre... 10,934 9,296 85.0% 1,638 15.0% 14,986 13,584 90.6% 1,402 ... 14,775 11,935 80.8% 2,840 19.2% 35,237,726 29,999,621 85.1% 5,238,105 14.9%
71 200 to 399 percent of the poverty thre... 33,430 30,567 91.4% 2,863 8.6% 35,870 31,862 88.8% 4,008 ... 32,318 28,411 87.9% 3,907 12.1% 93,261,064 84,506,859 90.6% 8,754,205 9.4%
72 At or above 400 percent of the poverty... 58,040 57,366 98.8% 674 1.2% 43,401 41,382 95.3% 2,019 ... 31,436 30,193 96.0% 1,243 4.0% 116,190,171 112,317,731 96.7% 3,872,440 3.3%

62 rows × 91 columns

In [13]:
health21.drop(labels=[11,12,13,49,55],axis=0,inplace=True)

health21.loc[2,'Label']="Age: <6"
health21.loc[3,'Label']="Age: 6-17"
health21.loc[4,'Label']="Age: 18-24"
health21.loc[5,'Label']="Age: 25-34"
health21.loc[6,'Label']="Age: 35-44"
health21.loc[7,'Label']="Age: 45-54"
health21.loc[8,'Label']="Age: 55-64"
health21.loc[9,'Label']="Age: 65-74"
health21.loc[10,'Label']="Age: 75+"
health21.loc[55,'Label']='Population 18 to 64 years'
health21.loc[43,'Label']='Population 26 years and over'
health21.loc[67,'Label']='Pop where poverty status determined'
health21.loc[31,'Label']='Male reference, no spouse'
health21.loc[32,'Label']='Female reference, no spouse'
health21.loc[33,'Label']='Non-family household/Other'
health21.loc[45,'Label']='High school grad'
health21.loc[57,'Label']='Worked < full-time in past 12 months'
health21.loc[68,'Label']='< 138% of poverty threshold'
health21.loc[70,'Label']='>= 400% of poverty threshold'
In [14]:
health15.drop(labels=[2,5,11,14],axis=0,inplace=True)

health15.loc[3,'Label']="Age: <6"
health15.loc[4,'Label']="Age: 6-17"
health15.loc[6,'Label']="Age: 18-24"
health15.loc[7,'Label']="Age: 25-34"
health15.loc[8,'Label']="Age: 35-44"
health15.loc[9,'Label']="Age: 45-54"
health15.loc[10,'Label']="Age: 55-64"
health15.loc[12,'Label']="Age: 65-74"
health15.loc[13,'Label']="Age: 75+"
health15.loc[32,'Label']='Male reference, no spouse'
health15.loc[33,'Label']='Female reference, no spouse'
health15.loc[44,'Label']='Population 26 years and over'
health15.loc[56,'Label']='Population 18 to 64 years'
health15.loc[68,'Label']='Pop where poverty status determined'
health15.loc[34,'Label']='Non-family household/Other'
health15.loc[46,'Label']='High school grad'
health15.loc[58,'Label']='Worked < full-time in past 12 months'
health15.loc[69,'Label']='< 138% of poverty threshold'
health15.loc[72,'Label']='>= 400% of poverty threshold'
In [15]:
health21.dtypes
Out[15]:
Label                  object
Ascension Total        object
Ascension Insured      object
Ascension Insured %    object
Ascension Uninsured    object
                        ...  
US Total               object
US Insured             object
US Insured %           object
US Uninsured           object
US Uninsured %         object
Length: 91, dtype: object
In [16]:
health15.dtypes
Out[16]:
Label                  object
Ascension Total        object
Ascension Insured      object
Ascension Insured %    object
Ascension Uninsured    object
                        ...  
US Total               object
US Insured             object
US Insured %           object
US Uninsured           object
US Uninsured %         object
Length: 91, dtype: object

Lastly, we transpose the dataset in order for the observations to be seen as columns.

In [17]:
health21.set_index("Label",inplace=True)
health21 = health21.transpose()
In [18]:
health21
Out[18]:
Label Civilian noninstitutionalized population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension Total 127,526 11,433 23,717 9,614 16,625 19,484 14,970 14,655 10,671 6,357 ... 24,560 19,968 19,047 53,767 127,341 22,612 50,030 54,699 15,268 NaN
Ascension Insured 118,592 10,915 22,919 8,961 14,029 17,851 13,658 13,231 10,671 6,357 ... 21,467 18,278 17,432 51,436 118,407 20,598 44,468 53,341 13,254 NaN
Ascension Insured % 93.0% 95.5% 96.6% 93.2% 84.4% 91.6% 91.2% 90.3% 100.0% 100.0% ... 87.4% 91.5% 91.5% 95.7% 93.0% 91.1% 88.9% 97.5% 86.8% NaN
Ascension Uninsured 8,934 518 798 653 2,596 1,633 1,312 1,424 0 0 ... 3,093 1,690 1,615 2,331 8,934 2,014 5,562 1,358 2,014 NaN
Ascension Uninsured % 7.0% 4.5% 3.4% 6.8% 15.6% 8.4% 8.8% 9.7% 0.0% 0.0% ... 12.6% 8.5% 8.5% 4.3% 7.0% 8.9% 11.1% 2.5% 13.2% NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
US Total 326,912,547 22,579,171 55,251,332 29,194,212 39,736,024 42,801,119 40,177,707 42,431,040 33,423,349 21,318,593 ... 52,636,739 52,420,604 44,130,048 134,415,894 323,173,982 59,917,950 127,403,787 135,852,245 41,362,026 NaN
US Insured 298,685,665 21,565,200 52,100,615 25,059,158 33,724,063 37,236,650 35,779,068 38,923,950 33,087,867 21,209,094 ... 45,822,787 46,669,851 40,369,230 127,910,378 295,171,921 50,962,094 113,526,496 130,683,331 35,025,846 NaN
US Insured % 91.4% 95.5% 94.3% 85.8% 84.9% 87.0% 89.1% 91.7% 99.0% 99.5% ... 87.1% 89.0% 91.5% 95.2% 91.3% 85.1% 89.1% 96.2% 84.7% NaN
US Uninsured 28,226,882 1,013,971 3,150,717 4,135,054 6,011,961 5,564,469 4,398,639 3,507,090 335,482 109,499 ... 6,813,952 5,750,753 3,760,818 6,505,516 28,002,061 8,955,856 13,877,291 5,168,914 6,336,180 NaN
US Uninsured % 8.6% 4.5% 5.7% 14.2% 15.1% 13.0% 10.9% 8.3% 1.0% 0.5% ... 12.9% 11.0% 8.5% 4.8% 8.7% 14.9% 10.9% 3.8% 15.3% NaN

90 rows × 57 columns

In [19]:
health15.set_index("Label",inplace=True)
health15 = health15.transpose()
In [20]:
health15
Out[20]:
Label Civilian noninstitutionalized population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension Total 118,671 10,276 22,631 10,193 17,116 17,484 15,404 13,455 7,735 4,377 ... 13,045 18,731 15,854 17,155 53,797 118,671 16,267 10,934 33,430 58,040
Ascension Insured 110,276 10,219 22,527 8,600 14,959 15,806 13,880 12,178 7,730 4,377 ... 10,760 16,100 14,430 15,772 53,143 110,276 13,047 9,296 30,567 57,366
Ascension Insured % 92.9% 99.4% 99.5% 84.4% 87.4% 90.4% 90.1% 90.5% 99.9% 100.0% ... 82.5% 86.0% 91.0% 91.9% 98.8% 92.9% 80.2% 85.0% 91.4% 98.8%
Ascension Uninsured 8,395 57 104 1,593 2,157 1,678 1,524 1,277 5 0 ... 2,285 2,631 1,424 1,383 654 8,395 3,220 1,638 2,863 674
Ascension Uninsured % 7.1% 0.6% 0.5% 15.6% 12.6% 9.6% 9.9% 9.5% 0.1% 0.0% ... 17.5% 14.0% 9.0% 8.1% 1.2% 7.1% 19.8% 15.0% 8.6% 1.2%
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
US Total 316,450,569 23,746,599 49,745,332 30,571,816 42,769,883 40,032,167 42,609,478 40,538,272 27,289,273 19,147,749 ... 51,281,973 66,138,622 57,325,411 43,043,638 94,862,617 312,780,720 68,091,759 35,237,726 93,261,064 116,190,171
US Insured 286,693,025 22,795,315 47,162,631 25,990,137 35,290,681 34,214,331 37,863,314 37,331,595 27,009,619 19,035,402 ... 43,630,639 57,066,212 51,533,624 39,976,592 91,003,092 283,223,843 56,399,632 29,999,621 84,506,859 112,317,731
US Insured % 90.6% 96.0% 94.8% 85.0% 82.5% 85.5% 88.9% 92.1% 99.0% 99.4% ... 85.1% 86.3% 89.9% 92.9% 95.9% 90.6% 82.8% 85.1% 90.6% 96.7%
US Uninsured 29,757,544 951,284 2,582,701 4,581,679 7,479,202 5,817,836 4,746,164 3,206,677 279,654 112,347 ... 7,651,334 9,072,410 5,791,787 3,067,046 3,859,525 29,556,877 11,692,127 5,238,105 8,754,205 3,872,440
US Uninsured % 9.4% 4.0% 5.2% 15.0% 17.5% 14.5% 11.1% 7.9% 1.0% 0.6% ... 14.9% 13.7% 10.1% 7.1% 4.1% 9.4% 17.2% 14.9% 9.4% 3.3%

90 rows × 58 columns

A quick note on Unicode Characters

There is an interesting error that we get when we try to access the column "Male". This is because there are indentations (more specifically non breaking spaces) in the original dataset that have been handled automatically by PANDAS replacing them with the "\xa0". Lets look at an example

In [21]:
health21["\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Male"]
Out[21]:
Ascension Total               61,710
Ascension Insured             57,329
Ascension Insured %            92.9%
Ascension Uninsured            4,381
Ascension Uninsured %           7.1%
                            ...     
US Total                 160,634,821
US Insured               145,030,492
US Insured %                   90.3%
US Uninsured              15,604,329
US Uninsured %                  9.7%
Name:         Male, Length: 90, dtype: object

If we had tried health_insur_LA_Tp["(spacespacespace)Male"], PANDAS would have thrown a KeyError. To us, non-breaking spaces look like regular spaces but as we can see above they are handled internally much differently. To avoid having to type "\ax0" a bunch of times, we are going to rename the columns to exclude these non-breaking spaces.

Thanks to aechase on GitHub and FolksTalk.com for helping to elucidate exactly what was going on here

Links: https://www.folkstalk.com/tech/pandas-xa0-with-code-examples/, https://github.com/pandas-dev/pandas/issues/14579

Now that the data has been roughly cleaned and organized, it is important to check that the datatypes of the variables are numbers so operations can be performed on them.

In [22]:
health21.columns = health21.columns.str.replace('\xa0', '')
health15.columns = health15.columns.str.replace('\xa0', '')

Typing the Data

In [23]:
health21.dtypes
Out[23]:
Label
Civilian noninstitutionalized population              object
Age: <6                                               object
Age: 6-17                                             object
Age: 18-24                                            object
Age: 25-34                                            object
Age: 35-44                                            object
Age: 45-54                                            object
Age: 55-64                                            object
Age: 65-74                                            object
Age: 75+                                              object
Male                                                  object
Female                                                object
White alone                                           object
Black or African American alone                       object
American Indian and Alaska Native alone               object
Asian alone                                           object
Native Hawaiian and Other Pacific Islander alone      object
Some other race alone                                 object
Two or more races                                     object
Hispanic or Latino (of any race)                      object
White alone, not Hispanic or Latino                   object
In family households                                  object
In married couple families                            object
In other families                                     object
Male reference, no spouse                             object
Female reference, no spouse                           object
Non-family household/Other                            object
Native born                                           object
Foreign born                                          object
Naturalized                                           object
Not a citizen                                         object
With a disability                                     object
No disability                                         object
Population 26 years and over                          object
Less than high school graduate                        object
High school grad                                      object
Some college or associate's degree                    object
Bachelor's degree or higher                           object
In labor force                                        object
Employed                                              object
Unemployed                                            object
Not in labor force                                    object
Worked full-time, year round in the past 12 months    object
Worked < full-time in past 12 months                  object
Did not work                                          object
Total household population                            object
Under $25,000                                         object
$25,000 to $49,999                                    object
$50,000 to $74,999                                    object
$75,000 to $99,999                                    object
$100,000 and over                                     object
Pop where poverty status determined                   object
< 138% of poverty threshold                           object
138 to 399 percent of the poverty threshold           object
>= 400% of poverty threshold                          object
Below 100 percent of the poverty threshold            object
Population 18 to 64 years                             object
dtype: object
In [24]:
health21.dtypes
Out[24]:
Label
Civilian noninstitutionalized population              object
Age: <6                                               object
Age: 6-17                                             object
Age: 18-24                                            object
Age: 25-34                                            object
Age: 35-44                                            object
Age: 45-54                                            object
Age: 55-64                                            object
Age: 65-74                                            object
Age: 75+                                              object
Male                                                  object
Female                                                object
White alone                                           object
Black or African American alone                       object
American Indian and Alaska Native alone               object
Asian alone                                           object
Native Hawaiian and Other Pacific Islander alone      object
Some other race alone                                 object
Two or more races                                     object
Hispanic or Latino (of any race)                      object
White alone, not Hispanic or Latino                   object
In family households                                  object
In married couple families                            object
In other families                                     object
Male reference, no spouse                             object
Female reference, no spouse                           object
Non-family household/Other                            object
Native born                                           object
Foreign born                                          object
Naturalized                                           object
Not a citizen                                         object
With a disability                                     object
No disability                                         object
Population 26 years and over                          object
Less than high school graduate                        object
High school grad                                      object
Some college or associate's degree                    object
Bachelor's degree or higher                           object
In labor force                                        object
Employed                                              object
Unemployed                                            object
Not in labor force                                    object
Worked full-time, year round in the past 12 months    object
Worked < full-time in past 12 months                  object
Did not work                                          object
Total household population                            object
Under $25,000                                         object
$25,000 to $49,999                                    object
$50,000 to $74,999                                    object
$75,000 to $99,999                                    object
$100,000 and over                                     object
Pop where poverty status determined                   object
< 138% of poverty threshold                           object
138 to 399 percent of the poverty threshold           object
>= 400% of poverty threshold                          object
Below 100 percent of the poverty threshold            object
Population 18 to 64 years                             object
dtype: object

Looks like they aren't numbers, rather they are strings. Lets cast them as numbers on both datasets so we can perform meaningful operations on them. However, we have to get rid of the other string characters (such as percentage signs and commas) before we can do this.

In [25]:
health21.replace(regex = ",", value = "", inplace = True)
health21.replace(regex = "%", value = "", inplace = True)
health21.replace(regex = "N", value = "", inplace = True)
health21=health21.apply(pd.to_numeric, errors = "coerce")

health21
Out[25]:
Label Civilian noninstitutionalized population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension Total 127526.0 11433.0 23717.0 9614.0 16625.0 19484.0 14970.0 14655.0 10671.0 6357.0 ... 24560.0 19968.0 19047.0 53767.0 127341.0 22612.0 50030.0 54699.0 15268.0 NaN
Ascension Insured 118592.0 10915.0 22919.0 8961.0 14029.0 17851.0 13658.0 13231.0 10671.0 6357.0 ... 21467.0 18278.0 17432.0 51436.0 118407.0 20598.0 44468.0 53341.0 13254.0 NaN
Ascension Insured % 93.0 95.5 96.6 93.2 84.4 91.6 91.2 90.3 100.0 100.0 ... 87.4 91.5 91.5 95.7 93.0 91.1 88.9 97.5 86.8 NaN
Ascension Uninsured 8934.0 518.0 798.0 653.0 2596.0 1633.0 1312.0 1424.0 0.0 0.0 ... 3093.0 1690.0 1615.0 2331.0 8934.0 2014.0 5562.0 1358.0 2014.0 NaN
Ascension Uninsured % 7.0 4.5 3.4 6.8 15.6 8.4 8.8 9.7 0.0 0.0 ... 12.6 8.5 8.5 4.3 7.0 8.9 11.1 2.5 13.2 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
US Total 326912547.0 22579171.0 55251332.0 29194212.0 39736024.0 42801119.0 40177707.0 42431040.0 33423349.0 21318593.0 ... 52636739.0 52420604.0 44130048.0 134415894.0 323173982.0 59917950.0 127403787.0 135852245.0 41362026.0 NaN
US Insured 298685665.0 21565200.0 52100615.0 25059158.0 33724063.0 37236650.0 35779068.0 38923950.0 33087867.0 21209094.0 ... 45822787.0 46669851.0 40369230.0 127910378.0 295171921.0 50962094.0 113526496.0 130683331.0 35025846.0 NaN
US Insured % 91.4 95.5 94.3 85.8 84.9 87.0 89.1 91.7 99.0 99.5 ... 87.1 89.0 91.5 95.2 91.3 85.1 89.1 96.2 84.7 NaN
US Uninsured 28226882.0 1013971.0 3150717.0 4135054.0 6011961.0 5564469.0 4398639.0 3507090.0 335482.0 109499.0 ... 6813952.0 5750753.0 3760818.0 6505516.0 28002061.0 8955856.0 13877291.0 5168914.0 6336180.0 NaN
US Uninsured % 8.6 4.5 5.7 14.2 15.1 13.0 10.9 8.3 1.0 0.5 ... 12.9 11.0 8.5 4.8 8.7 14.9 10.9 3.8 15.3 NaN

90 rows × 57 columns

In [26]:
health15.replace(regex = ",", value = "", inplace = True)
health15.replace(regex = "%", value = "", inplace = True)
health15.replace(regex = "N", value = "", inplace = True)
health15=health15.apply(pd.to_numeric, errors = "coerce")

health15
Out[26]:
Label Civilian noninstitutionalized population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension Total 118671.0 10276.0 22631.0 10193.0 17116.0 17484.0 15404.0 13455.0 7735.0 4377.0 ... 13045.0 18731.0 15854.0 17155.0 53797.0 118671.0 16267.0 10934.0 33430.0 58040.0
Ascension Insured 110276.0 10219.0 22527.0 8600.0 14959.0 15806.0 13880.0 12178.0 7730.0 4377.0 ... 10760.0 16100.0 14430.0 15772.0 53143.0 110276.0 13047.0 9296.0 30567.0 57366.0
Ascension Insured % 92.9 99.4 99.5 84.4 87.4 90.4 90.1 90.5 99.9 100.0 ... 82.5 86.0 91.0 91.9 98.8 92.9 80.2 85.0 91.4 98.8
Ascension Uninsured 8395.0 57.0 104.0 1593.0 2157.0 1678.0 1524.0 1277.0 5.0 0.0 ... 2285.0 2631.0 1424.0 1383.0 654.0 8395.0 3220.0 1638.0 2863.0 674.0
Ascension Uninsured % 7.1 0.6 0.5 15.6 12.6 9.6 9.9 9.5 0.1 0.0 ... 17.5 14.0 9.0 8.1 1.2 7.1 19.8 15.0 8.6 1.2
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
US Total 316450569.0 23746599.0 49745332.0 30571816.0 42769883.0 40032167.0 42609478.0 40538272.0 27289273.0 19147749.0 ... 51281973.0 66138622.0 57325411.0 43043638.0 94862617.0 312780720.0 68091759.0 35237726.0 93261064.0 116190171.0
US Insured 286693025.0 22795315.0 47162631.0 25990137.0 35290681.0 34214331.0 37863314.0 37331595.0 27009619.0 19035402.0 ... 43630639.0 57066212.0 51533624.0 39976592.0 91003092.0 283223843.0 56399632.0 29999621.0 84506859.0 112317731.0
US Insured % 90.6 96.0 94.8 85.0 82.5 85.5 88.9 92.1 99.0 99.4 ... 85.1 86.3 89.9 92.9 95.9 90.6 82.8 85.1 90.6 96.7
US Uninsured 29757544.0 951284.0 2582701.0 4581679.0 7479202.0 5817836.0 4746164.0 3206677.0 279654.0 112347.0 ... 7651334.0 9072410.0 5791787.0 3067046.0 3859525.0 29556877.0 11692127.0 5238105.0 8754205.0 3872440.0
US Uninsured % 9.4 4.0 5.2 15.0 17.5 14.5 11.1 7.9 1.0 0.6 ... 14.9 13.7 10.1 7.1 4.1 9.4 17.2 14.9 9.4 3.3

90 rows × 58 columns

Now we have cleaned the dataset of all string characters and converted the data to numbers, casting all the missing values as a NaN

Split Each Dataframe

At this point, it seems like we would be able to start doing some analysis. However, there are repeat observations (parishes) on the table, but in different units. Essentially, there are three different tables smushed into one. To make our analysis meaningful, we will have to filter the larger tables into smaller ones with the same units.

health21_percent

In [27]:
#isolating the percentages
health21_percent = pd.DataFrame(health21[health21.index.str.contains("%")])
health21_percent.rename(columns={"Civilian noninstitutionalized population": "Percent"}, inplace=True)
health21_percent
Out[27]:
Label Percent Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension Insured % 93.0 95.5 96.6 93.2 84.4 91.6 91.2 90.3 100.0 100.0 ... 87.4 91.5 91.5 95.7 93.0 91.1 88.9 97.5 86.8 NaN
Ascension Uninsured % 7.0 4.5 3.4 6.8 15.6 8.4 8.8 9.7 0.0 0.0 ... 12.6 8.5 8.5 4.3 7.0 8.9 11.1 2.5 13.2 NaN
Bossier Insured % 90.6 99.0 95.6 80.1 78.1 87.6 89.6 88.2 100.0 100.0 ... 86.8 92.5 96.7 93.3 90.6 84.2 89.9 95.3 80.9 NaN
Bossier Uninsured % 9.4 1.0 4.4 19.9 21.9 12.4 10.4 11.8 0.0 0.0 ... 13.2 7.5 3.3 6.7 9.4 15.8 10.1 4.7 19.1 NaN
Caddo Insured % 93.8 99.3 98.6 88.4 86.4 91.0 89.2 92.3 100.0 100.0 ... 92.9 90.7 96.0 94.9 93.8 93.6 93.3 94.8 94.4 NaN
Caddo Uninsured % 6.2 0.7 1.4 11.6 13.6 9.0 10.8 7.7 0.0 0.0 ... 7.1 9.3 4.0 5.1 6.2 6.4 6.7 5.2 5.6 NaN
Calcasieu Insured % 92.0 96.3 96.4 89.9 79.7 91.2 85.9 95.0 98.5 98.8 ... 87.5 92.3 88.2 97.9 91.9 90.1 89.5 95.4 88.9 NaN
Calcasieu Uninsured % 8.0 3.7 3.6 10.1 20.3 8.8 14.1 5.0 1.5 1.2 ... 12.5 7.7 11.8 2.1 8.1 9.9 10.5 4.6 11.1 NaN
East Baton Rouge Insured % 92.4 95.8 97.6 89.4 85.3 87.1 90.6 92.9 98.8 99.1 ... 89.9 93.2 94.3 95.8 92.3 89.3 90.8 96.3 88.7 NaN
East Baton Rouge Uninsured % 7.6 4.2 2.4 10.6 14.7 12.9 9.4 7.1 1.2 0.9 ... 10.1 6.8 5.7 4.2 7.7 10.7 9.2 3.7 11.3 NaN
Iberia Insured % 93.8 100.0 95.5 88.3 92.2 90.1 95.2 87.2 99.2 100.0 ... 94.5 92.7 91.2 97.2 93.8 93.2 94.3 93.6 94.7 NaN
Iberia Uninsured % 6.2 0.0 4.5 11.7 7.8 9.9 4.8 12.8 0.8 0.0 ... 5.5 7.3 8.8 2.8 6.2 6.8 5.7 6.4 5.3 NaN
Jefferson Insured % 90.0 92.8 92.0 83.6 83.5 86.7 85.9 90.0 99.1 99.3 ... 85.5 86.4 90.0 95.1 90.0 86.4 86.6 96.5 88.2 NaN
Jefferson Uninsured % 10.0 7.2 8.0 16.4 16.5 13.3 14.1 10.0 0.9 0.7 ... 14.5 13.6 10.0 4.9 10.0 13.6 13.4 3.5 11.8 NaN
Lafayette Insured % 92.7 96.9 97.2 92.4 86.4 86.3 90.1 92.2 100.0 99.6 ... 90.0 94.0 88.6 96.7 92.6 90.4 90.3 96.8 91.1 NaN
Lafayette Uninsured % 7.3 3.1 2.8 7.6 13.6 13.7 9.9 7.8 0.0 0.4 ... 10.0 6.0 11.4 3.3 7.4 9.6 9.7 3.2 8.9 NaN
Lafourche Insured % 96.4 98.8 98.8 90.1 95.3 96.6 92.1 96.6 99.7 100.0 ... 97.9 99.0 97.5 95.7 96.5 93.6 96.3 98.8 91.5 NaN
Lafourche Uninsured % 3.6 1.2 1.2 9.9 4.7 3.4 7.9 3.4 0.3 0.0 ... 2.1 1.0 2.5 4.3 3.5 6.4 3.7 1.2 8.5 NaN
Livingston Insured % 91.3 94.3 91.4 86.6 80.5 92.0 90.7 93.2 100.0 100.0 ... 86.2 91.2 88.6 96.1 91.4 81.9 91.1 96.3 82.8 NaN
Livingston Uninsured % 8.7 5.7 8.6 13.4 19.5 8.0 9.3 6.8 0.0 0.0 ... 13.8 8.8 11.4 3.9 8.6 18.1 8.9 3.7 17.2 NaN
Orleans Insured % 92.7 98.0 95.0 91.3 86.8 89.1 90.2 92.9 98.6 99.5 ... 91.7 93.3 88.7 95.9 92.7 89.8 91.6 96.7 89.9 NaN
Orleans Uninsured % 7.3 2.0 5.0 8.7 13.2 10.9 9.8 7.1 1.4 0.5 ... 8.3 6.7 11.3 4.1 7.3 10.2 8.4 3.3 10.1 NaN
Ouachita Insured % 91.8 93.9 94.4 87.7 90.8 84.3 90.6 92.7 95.2 100.0 ... 91.9 92.3 89.4 92.2 91.8 91.5 90.9 93.2 95.3 NaN
Ouachita Uninsured % 8.2 6.1 5.6 12.3 9.2 15.7 9.4 7.3 4.8 0.0 ... 8.1 7.7 10.6 7.8 8.2 8.5 9.1 6.8 4.7 NaN
Rapides Insured % 90.5 98.7 93.1 89.2 85.0 83.7 85.1 86.6 99.8 100.0 ... 89.8 89.5 93.4 91.0 90.4 90.6 88.4 93.6 90.2 NaN
Rapides Uninsured % 9.5 1.3 6.9 10.8 15.0 16.3 14.9 13.4 0.2 0.0 ... 10.2 10.5 6.6 9.0 9.6 9.4 11.6 6.4 9.8 NaN
St. Landry Insured % 90.1 95.9 88.5 87.7 94.1 76.3 88.9 91.8 99.5 100.0 ... 89.4 83.0 92.0 90.9 90.1 91.8 88.8 89.7 92.7 NaN
St. Landry Uninsured % 9.9 4.1 11.5 12.3 5.9 23.7 11.1 8.2 0.5 0.0 ... 10.6 17.0 8.0 9.1 9.9 8.2 11.2 10.3 7.3 NaN
St. Tammany Insured % 93.4 98.9 94.4 88.9 81.3 87.1 96.8 95.2 99.4 100.0 ... 84.5 95.1 93.6 97.1 93.4 86.8 92.3 97.8 82.9 NaN
St. Tammany Uninsured % 6.6 1.1 5.6 11.1 18.7 12.9 3.2 4.8 0.6 0.0 ... 15.5 4.9 6.4 2.9 6.6 13.2 7.7 2.2 17.1 NaN
Tangipahoa Insured % 92.7 98.1 96.6 86.2 92.0 90.1 94.9 81.8 99.5 100.0 ... 91.1 89.9 89.5 97.2 92.6 93.2 90.9 94.7 93.4 NaN
Tangipahoa Uninsured % 7.3 1.9 3.4 13.8 8.0 9.9 5.1 18.2 0.5 0.0 ... 8.9 10.1 10.5 2.8 7.4 6.8 9.1 5.3 6.6 NaN
Terrebonne Insured % 93.5 95.5 98.3 80.5 87.6 95.8 86.1 97.3 95.9 100.0 ... 92.2 93.1 97.4 94.2 93.5 87.6 93.9 96.1 86.8 NaN
Terrebonne Uninsured % 6.5 4.5 1.7 19.5 12.4 4.2 13.9 2.7 4.1 0.0 ... 7.8 6.9 2.6 5.8 6.5 12.4 6.1 3.9 13.2 NaN
US Insured % 91.4 95.5 94.3 85.8 84.9 87.0 89.1 91.7 99.0 99.5 ... 87.1 89.0 91.5 95.2 91.3 85.1 89.1 96.2 84.7 NaN
US Uninsured % 8.6 4.5 5.7 14.2 15.1 13.0 10.9 8.3 1.0 0.5 ... 12.9 11.0 8.5 4.8 8.7 14.9 10.9 3.8 15.3 NaN

36 rows × 57 columns

health21_percent_insured

In [28]:
# Percentage of Insured
health21_percent_insured = pd.DataFrame(health21_percent[health21_percent.index.str.contains("Insured")])
health21_percent_insured.rename(columns={"Percent": "Insured Percent"}, inplace=True)
health21_percent_insured.rename(index={
    "Ascension Insured %": "Ascension",
    "Bossier Insured %": "Bossier",
    "Caddo Insured %": "Caddo",
    "Calcasieu Insured %": "Calcasieu",
    "East Baton Rouge Insured %": "East Baton Rouge",
    "Iberia Insured %": "Iberia",
    "Jefferson Insured %": "Jefferson",
    "Lafayette Insured %": "Lafayette",
    "Lafourche Insured %": "Lafourche",
    "Livingston Insured %": "Livingston",
    "Orleans Insured %": "Orleans",
    "Ouachita Insured %": "Ouachita",
    "Rapides Insured %": "Rapides",
    "St. Landry Insured %": "St. Landry",
    "St. Tammany Insured %": "St. Tammany",
    "Tangipahoa Insured %": "Tangipahoa",
    "Terrebonne Insured %": "Terrebonne",
    "US Insured %": "US"
},inplace=True)
health21_percent_insured
Out[28]:
Label Insured Percent Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension 93.0 95.5 96.6 93.2 84.4 91.6 91.2 90.3 100.0 100.0 ... 87.4 91.5 91.5 95.7 93.0 91.1 88.9 97.5 86.8 NaN
Bossier 90.6 99.0 95.6 80.1 78.1 87.6 89.6 88.2 100.0 100.0 ... 86.8 92.5 96.7 93.3 90.6 84.2 89.9 95.3 80.9 NaN
Caddo 93.8 99.3 98.6 88.4 86.4 91.0 89.2 92.3 100.0 100.0 ... 92.9 90.7 96.0 94.9 93.8 93.6 93.3 94.8 94.4 NaN
Calcasieu 92.0 96.3 96.4 89.9 79.7 91.2 85.9 95.0 98.5 98.8 ... 87.5 92.3 88.2 97.9 91.9 90.1 89.5 95.4 88.9 NaN
East Baton Rouge 92.4 95.8 97.6 89.4 85.3 87.1 90.6 92.9 98.8 99.1 ... 89.9 93.2 94.3 95.8 92.3 89.3 90.8 96.3 88.7 NaN
Iberia 93.8 100.0 95.5 88.3 92.2 90.1 95.2 87.2 99.2 100.0 ... 94.5 92.7 91.2 97.2 93.8 93.2 94.3 93.6 94.7 NaN
Jefferson 90.0 92.8 92.0 83.6 83.5 86.7 85.9 90.0 99.1 99.3 ... 85.5 86.4 90.0 95.1 90.0 86.4 86.6 96.5 88.2 NaN
Lafayette 92.7 96.9 97.2 92.4 86.4 86.3 90.1 92.2 100.0 99.6 ... 90.0 94.0 88.6 96.7 92.6 90.4 90.3 96.8 91.1 NaN
Lafourche 96.4 98.8 98.8 90.1 95.3 96.6 92.1 96.6 99.7 100.0 ... 97.9 99.0 97.5 95.7 96.5 93.6 96.3 98.8 91.5 NaN
Livingston 91.3 94.3 91.4 86.6 80.5 92.0 90.7 93.2 100.0 100.0 ... 86.2 91.2 88.6 96.1 91.4 81.9 91.1 96.3 82.8 NaN
Orleans 92.7 98.0 95.0 91.3 86.8 89.1 90.2 92.9 98.6 99.5 ... 91.7 93.3 88.7 95.9 92.7 89.8 91.6 96.7 89.9 NaN
Ouachita 91.8 93.9 94.4 87.7 90.8 84.3 90.6 92.7 95.2 100.0 ... 91.9 92.3 89.4 92.2 91.8 91.5 90.9 93.2 95.3 NaN
Rapides 90.5 98.7 93.1 89.2 85.0 83.7 85.1 86.6 99.8 100.0 ... 89.8 89.5 93.4 91.0 90.4 90.6 88.4 93.6 90.2 NaN
St. Landry 90.1 95.9 88.5 87.7 94.1 76.3 88.9 91.8 99.5 100.0 ... 89.4 83.0 92.0 90.9 90.1 91.8 88.8 89.7 92.7 NaN
St. Tammany 93.4 98.9 94.4 88.9 81.3 87.1 96.8 95.2 99.4 100.0 ... 84.5 95.1 93.6 97.1 93.4 86.8 92.3 97.8 82.9 NaN
Tangipahoa 92.7 98.1 96.6 86.2 92.0 90.1 94.9 81.8 99.5 100.0 ... 91.1 89.9 89.5 97.2 92.6 93.2 90.9 94.7 93.4 NaN
Terrebonne 93.5 95.5 98.3 80.5 87.6 95.8 86.1 97.3 95.9 100.0 ... 92.2 93.1 97.4 94.2 93.5 87.6 93.9 96.1 86.8 NaN
US 91.4 95.5 94.3 85.8 84.9 87.0 89.1 91.7 99.0 99.5 ... 87.1 89.0 91.5 95.2 91.3 85.1 89.1 96.2 84.7 NaN

18 rows × 57 columns

health21_percent_uninsured

In [29]:
# Percentage Uninsured
health21_percent_uninsured = pd.DataFrame(health21_percent[health21_percent.index.str.contains("Uninsured")])
health21_percent_uninsured.rename(columns={"Percent": "Uninsured Percent"}, inplace=True)
health21_percent_uninsured.rename(index={
    "Ascension Uninsured %": "Ascension",
    "Bossier Uninsured %": "Bossier",
    "Caddo Uninsured %": "Caddo",
    "Calcasieu Uninsured %": "Calcasieu",
    "East Baton Rouge Uninsured %": "East Baton Rouge",
    "Iberia Uninsured %": "Iberia",
    "Jefferson Uninsured %": "Jefferson",
    "Lafayette Uninsured %": "Lafayette",
    "Lafourche Uninsured %": "Lafourche",
    "Livingston Uninsured %": "Livingston",
    "Orleans Uninsured %": "Orleans",
    "Ouachita Uninsured %": "Ouachita",
    "Rapides Uninsured %": "Rapides",
    "St. Landry Uninsured %": "St. Landry",
    "St. Tammany Uninsured %": "St. Tammany",
    "Tangipahoa Uninsured %": "Tangipahoa",
    "Terrebonne Uninsured %": "Terrebonne",
    "US Uninsured %": "US"
},inplace=True)
health21_percent_uninsured
Out[29]:
Label Uninsured Percent Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension 7.0 4.5 3.4 6.8 15.6 8.4 8.8 9.7 0.0 0.0 ... 12.6 8.5 8.5 4.3 7.0 8.9 11.1 2.5 13.2 NaN
Bossier 9.4 1.0 4.4 19.9 21.9 12.4 10.4 11.8 0.0 0.0 ... 13.2 7.5 3.3 6.7 9.4 15.8 10.1 4.7 19.1 NaN
Caddo 6.2 0.7 1.4 11.6 13.6 9.0 10.8 7.7 0.0 0.0 ... 7.1 9.3 4.0 5.1 6.2 6.4 6.7 5.2 5.6 NaN
Calcasieu 8.0 3.7 3.6 10.1 20.3 8.8 14.1 5.0 1.5 1.2 ... 12.5 7.7 11.8 2.1 8.1 9.9 10.5 4.6 11.1 NaN
East Baton Rouge 7.6 4.2 2.4 10.6 14.7 12.9 9.4 7.1 1.2 0.9 ... 10.1 6.8 5.7 4.2 7.7 10.7 9.2 3.7 11.3 NaN
Iberia 6.2 0.0 4.5 11.7 7.8 9.9 4.8 12.8 0.8 0.0 ... 5.5 7.3 8.8 2.8 6.2 6.8 5.7 6.4 5.3 NaN
Jefferson 10.0 7.2 8.0 16.4 16.5 13.3 14.1 10.0 0.9 0.7 ... 14.5 13.6 10.0 4.9 10.0 13.6 13.4 3.5 11.8 NaN
Lafayette 7.3 3.1 2.8 7.6 13.6 13.7 9.9 7.8 0.0 0.4 ... 10.0 6.0 11.4 3.3 7.4 9.6 9.7 3.2 8.9 NaN
Lafourche 3.6 1.2 1.2 9.9 4.7 3.4 7.9 3.4 0.3 0.0 ... 2.1 1.0 2.5 4.3 3.5 6.4 3.7 1.2 8.5 NaN
Livingston 8.7 5.7 8.6 13.4 19.5 8.0 9.3 6.8 0.0 0.0 ... 13.8 8.8 11.4 3.9 8.6 18.1 8.9 3.7 17.2 NaN
Orleans 7.3 2.0 5.0 8.7 13.2 10.9 9.8 7.1 1.4 0.5 ... 8.3 6.7 11.3 4.1 7.3 10.2 8.4 3.3 10.1 NaN
Ouachita 8.2 6.1 5.6 12.3 9.2 15.7 9.4 7.3 4.8 0.0 ... 8.1 7.7 10.6 7.8 8.2 8.5 9.1 6.8 4.7 NaN
Rapides 9.5 1.3 6.9 10.8 15.0 16.3 14.9 13.4 0.2 0.0 ... 10.2 10.5 6.6 9.0 9.6 9.4 11.6 6.4 9.8 NaN
St. Landry 9.9 4.1 11.5 12.3 5.9 23.7 11.1 8.2 0.5 0.0 ... 10.6 17.0 8.0 9.1 9.9 8.2 11.2 10.3 7.3 NaN
St. Tammany 6.6 1.1 5.6 11.1 18.7 12.9 3.2 4.8 0.6 0.0 ... 15.5 4.9 6.4 2.9 6.6 13.2 7.7 2.2 17.1 NaN
Tangipahoa 7.3 1.9 3.4 13.8 8.0 9.9 5.1 18.2 0.5 0.0 ... 8.9 10.1 10.5 2.8 7.4 6.8 9.1 5.3 6.6 NaN
Terrebonne 6.5 4.5 1.7 19.5 12.4 4.2 13.9 2.7 4.1 0.0 ... 7.8 6.9 2.6 5.8 6.5 12.4 6.1 3.9 13.2 NaN
US 8.6 4.5 5.7 14.2 15.1 13.0 10.9 8.3 1.0 0.5 ... 12.9 11.0 8.5 4.8 8.7 14.9 10.9 3.8 15.3 NaN

18 rows × 57 columns

health21_total

In [30]:
# Get the numeric insurance data
h = health21[~health21.index.str.contains("%")]
In [31]:
# Get the totals
health21_total = pd.DataFrame(h[h.index.str.contains("Total")])
health21_total.rename(columns={"Civilian noninstitutionalized population": "Total Citizens"}, inplace=True)
health21_total.rename(index={
    "Ascension Total": "Ascension",
    "Bossier Total": "Bossier",
    "Caddo Total": "Caddo",
    "Calcasieu Total": "Calcasieu",
    "East Baton Rouge Total": "East Baton Rouge",
    "Iberia Total": "Iberia",
    "Jefferson Total": "Jefferson",
    "Lafayette Total": "Lafayette",
    "Lafourche Total": "Lafourche",
    "Livingston Total": "Livingston",
    "Orleans Total": "Orleans",
    "Ouachita Total": "Ouachita",
    "Rapides Total": "Rapides",
    "St. Landry Total": "St. Landry",
    "St. Tammany Total": "St. Tammany",
    "Tangipahoa Total": "Tangipahoa",
    "Terrebonne Total": "Terrebonne",
    "US Total": "US"
},inplace=True)
health21_total
Out[31]:
Label Total Citizens Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension 127526.0 11433.0 23717.0 9614.0 16625.0 19484.0 14970.0 14655.0 10671.0 6357.0 ... 24560.0 19968.0 19047.0 53767.0 127341.0 22612.0 50030.0 54699.0 15268.0 NaN
Bossier 121855.0 9507.0 24343.0 11334.0 12725.0 16301.0 13300.0 15610.0 10286.0 8449.0 ... 26314.0 21206.0 14283.0 41310.0 121371.0 28139.0 48735.0 44497.0 21455.0 NaN
Caddo 228813.0 18729.0 38202.0 20972.0 24826.0 28228.0 26375.0 29521.0 26028.0 15932.0 ... 49653.0 34794.0 26766.0 54911.0 228370.0 74163.0 92131.0 62076.0 54271.0 NaN
Calcasieu 203019.0 16660.0 35418.0 17620.0 25556.0 26246.0 23769.0 25893.0 19999.0 11858.0 ... 39560.0 31291.0 28824.0 68495.0 201887.0 46762.0 76625.0 78500.0 38061.0 NaN
East Baton Rouge 449397.0 33933.0 76188.0 60545.0 55862.0 56586.0 46077.0 51769.0 42692.0 25745.0 ... 103862.0 69620.0 42950.0 142578.0 438889.0 122469.0 161505.0 154915.0 84188.0 NaN
Iberia 68165.0 5446.0 13317.0 5680.0 5922.0 9223.0 8118.0 9135.0 7159.0 4165.0 ... 13124.0 12608.0 9896.0 16339.0 68077.0 21859.0 29046.0 17172.0 16862.0 NaN
Jefferson 429936.0 32498.0 68417.0 32415.0 51585.0 56002.0 50552.0 59429.0 48431.0 30607.0 ... 84902.0 77301.0 60652.0 133837.0 429650.0 102408.0 175664.0 151578.0 74348.0 NaN
Lafayette 242120.0 18088.0 42116.0 24251.0 32401.0 34732.0 27057.0 29652.0 22262.0 11561.0 ... 41862.0 42896.0 27321.0 82051.0 239628.0 58756.0 94218.0 86654.0 44190.0 NaN
Lafourche 96731.0 7214.0 16012.0 8808.0 10036.0 13054.0 12202.0 12261.0 10842.0 6302.0 ... 14537.0 13748.0 17492.0 30889.0 95865.0 23005.0 41889.0 30971.0 13958.0 NaN
Livingston 144606.0 10357.0 29008.0 12876.0 17142.0 20072.0 18359.0 17397.0 12157.0 7238.0 ... 26170.0 20480.0 18449.0 63887.0 144369.0 25939.0 63505.0 54925.0 17132.0 NaN
Orleans 371682.0 25038.0 53223.0 31199.0 53233.0 56078.0 43313.0 48562.0 39774.0 21262.0 ... 72785.0 58075.0 33903.0 107098.0 365382.0 118533.0 127058.0 119791.0 91102.0 NaN
Ouachita 156871.0 11836.0 29002.0 15714.0 18626.0 19182.0 18862.0 19079.0 14974.0 9596.0 ... 28042.0 25656.0 21759.0 38366.0 154837.0 50119.0 60464.0 44254.0 40784.0 NaN
Rapides 125657.0 9381.0 23507.0 10596.0 13987.0 15604.0 14738.0 16885.0 12504.0 8455.0 ... 31571.0 21319.0 15158.0 30160.0 125230.0 36584.0 55909.0 32737.0 24921.0 NaN
St. Landry 81238.0 6422.0 16643.0 6316.0 8593.0 12161.0 6719.0 10684.0 8841.0 4859.0 ... 20789.0 10938.0 10347.0 17658.0 81026.0 29648.0 32931.0 18447.0 21981.0 NaN
St. Tammany 265289.0 18515.0 49702.0 17418.0 26565.0 35747.0 32455.0 36875.0 30174.0 17838.0 ... 45437.0 48666.0 36255.0 103058.0 264890.0 54385.0 104143.0 106362.0 37232.0 NaN
Tangipahoa 133588.0 10600.0 24204.0 16972.0 13759.0 17378.0 14285.0 15223.0 14593.0 6574.0 ... 26494.0 26957.0 21094.0 33984.0 131633.0 31150.0 59481.0 41002.0 20270.0 NaN
Terrebonne 106880.0 8716.0 19956.0 6878.0 13308.0 13944.0 12968.0 14301.0 10426.0 6383.0 ... 18161.0 24241.0 12708.0 37180.0 106647.0 18191.0 52544.0 35912.0 15606.0 NaN
US 326912547.0 22579171.0 55251332.0 29194212.0 39736024.0 42801119.0 40177707.0 42431040.0 33423349.0 21318593.0 ... 52636739.0 52420604.0 44130048.0 134415894.0 323173982.0 59917950.0 127403787.0 135852245.0 41362026.0 NaN

18 rows × 57 columns

health21_insured

In [32]:
# Get numbers of insured
health21_insured = pd.DataFrame(h[h.index.str.contains("Insured")])
health21_insured.rename(index={
    "Ascension Insured": "Ascension",
    "Bossier Insured": "Bossier",
    "Caddo Insured": "Caddo",
    "Calcasieu Insured": "Calcasieu",
    "East Baton Rouge Insured": "East Baton Rouge",
    "Iberia Insured": "Iberia",
    "Jefferson Insured": "Jefferson",
    "Lafayette Insured": "Lafayette",
    "Lafourche Insured": "Lafourche",
    "Livingston Insured": "Livingston",
    "Orleans Insured": "Orleans",
    "Ouachita Insured": "Ouachita",
    "Rapides Insured": "Rapides",
    "St. Landry Insured": "St. Landry",
    "St. Tammany Insured": "St. Tammany",
    "Tangipahoa Insured": "Tangipahoa",
    "Terrebonne Insured": "Terrebonne",
    "US Insured": "US"
},inplace=True)
health21_insured=health21_insured.rename(columns={"Civilian noninstitutionalized population": "Insured Population"})
health21_insured
Out[32]:
Label Insured Population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension 118592.0 10915.0 22919.0 8961.0 14029.0 17851.0 13658.0 13231.0 10671.0 6357.0 ... 21467.0 18278.0 17432.0 51436.0 118407.0 20598.0 44468.0 53341.0 13254.0 NaN
Bossier 110390.0 9410.0 23262.0 9078.0 9942.0 14286.0 11916.0 13761.0 10286.0 8449.0 ... 22848.0 19625.0 13808.0 38557.0 109906.0 23694.0 43812.0 42400.0 17349.0 NaN
Caddo 214652.0 18605.0 37657.0 18532.0 21460.0 25686.0 23524.0 27240.0 26016.0 15932.0 ... 46151.0 31542.0 25707.0 52108.0 214209.0 69436.0 85952.0 58821.0 51227.0 NaN
Calcasieu 186754.0 16049.0 34126.0 15837.0 20377.0 23935.0 20426.0 24587.0 19703.0 11714.0 ... 34601.0 28867.0 25414.0 67034.0 185622.0 42153.0 68595.0 74874.0 33833.0 NaN
East Baton Rouge 415432.0 32495.0 74383.0 54100.0 47653.0 49289.0 41726.0 48088.0 42194.0 25504.0 ... 93408.0 64878.0 40488.0 136644.0 405183.0 109389.0 146660.0 149134.0 74641.0 NaN
Iberia 63918.0 5446.0 12723.0 5015.0 5462.0 8314.0 7729.0 7964.0 7100.0 4165.0 ... 12404.0 11686.0 9024.0 15874.0 63830.0 20370.0 27379.0 16081.0 15968.0 NaN
Jefferson 387141.0 30151.0 62944.0 27094.0 43087.0 48543.0 43422.0 53493.0 48010.0 30397.0 ... 72599.0 66780.0 54585.0 127300.0 386873.0 88497.0 152063.0 146313.0 65550.0 NaN
Lafayette 224345.0 17530.0 40942.0 22414.0 27995.0 29982.0 24375.0 27331.0 22262.0 11514.0 ... 37662.0 40343.0 24218.0 79319.0 221990.0 53088.0 85032.0 83870.0 40236.0 NaN
Lafourche 93236.0 7124.0 15818.0 7932.0 9563.0 12604.0 11235.0 11848.0 10810.0 6302.0 ... 14226.0 13610.0 17063.0 29576.0 92473.0 21534.0 40327.0 30612.0 12776.0 NaN
Livingston 131971.0 9765.0 26514.0 11149.0 13807.0 18463.0 16656.0 16222.0 12157.0 7238.0 ... 22549.0 18684.0 16353.0 61372.0 131971.0 21244.0 57860.0 52867.0 14191.0 NaN
Orleans 344368.0 24549.0 50585.0 28488.0 46228.0 49972.0 39067.0 45109.0 39215.0 21155.0 ... 66767.0 54177.0 30077.0 102666.0 338613.0 106471.0 116358.0 115784.0 81926.0 NaN
Ouachita 143992.0 11110.0 27386.0 13788.0 16909.0 16173.0 17084.0 17685.0 14261.0 9596.0 ... 25758.0 23682.0 19459.0 35388.0 142101.0 45859.0 54983.0 41259.0 38860.0 NaN
Rapides 113675.0 9263.0 21894.0 9455.0 11894.0 13067.0 12548.0 14625.0 12474.0 8455.0 ... 28364.0 19083.0 14161.0 27460.0 113248.0 33156.0 49450.0 30642.0 22474.0 NaN
St. Landry 73223.0 6161.0 14729.0 5537.0 8086.0 9280.0 5974.0 9803.0 8794.0 4859.0 ... 18594.0 9074.0 9518.0 16055.0 73011.0 27226.0 29237.0 16548.0 20386.0 NaN
St. Tammany 247777.0 18308.0 46929.0 15480.0 21597.0 31122.0 31410.0 35109.0 29984.0 17838.0 ... 38389.0 46298.0 33922.0 100087.0 247378.0 47184.0 96141.0 104053.0 30880.0 NaN
Tangipahoa 123822.0 10401.0 23376.0 14626.0 12652.0 15659.0 13550.0 12458.0 14526.0 6574.0 ... 24128.0 24224.0 18889.0 33020.0 121955.0 29028.0 54078.0 38849.0 18941.0 NaN
Terrebonne 99977.0 8324.0 19614.0 5536.0 11664.0 13365.0 11171.0 13918.0 10002.0 6383.0 ... 16736.0 22574.0 12375.0 35029.0 99744.0 15927.0 49318.0 34499.0 13540.0 NaN
US 298685665.0 21565200.0 52100615.0 25059158.0 33724063.0 37236650.0 35779068.0 38923950.0 33087867.0 21209094.0 ... 45822787.0 46669851.0 40369230.0 127910378.0 295171921.0 50962094.0 113526496.0 130683331.0 35025846.0 NaN

18 rows × 57 columns

health21_uninsured

In [33]:
# Get numbers of Uninsured
health21_uninsured = pd.DataFrame(h[h.index.str.contains("Uninsured")])
health21_uninsured.rename(index={
    "Ascension Uninsured": "Ascension",
    "Bossier Uninsured": "Bossier",
    "Caddo Uninsured": "Caddo",
    "Calcasieu Uninsured": "Calcasieu",
    "East Baton Rouge Uninsured": "East Baton Rouge",
    "Iberia Uninsured": "Iberia",
    "Jefferson Uninsured": "Jefferson",
    "Lafayette Uninsured": "Lafayette",
    "Lafourche Uninsured": "Lafourche",
    "Livingston Uninsured": "Livingston",
    "Orleans Uninsured": "Orleans",
    "Ouachita Uninsured": "Ouachita",
    "Rapides Uninsured": "Rapides",
    "St. Landry Uninsured": "St. Landry",
    "St. Tammany Uninsured": "St. Tammany",
    "Tangipahoa Uninsured": "Tangipahoa",
    "Terrebonne Uninsured": "Terrebonne",
    "US Uninsured": "US"
},inplace=True)
health21_uninsured=health21_uninsured.rename(columns={"Civilian noninstitutionalized population": "Uninsured Population"})
health21_uninsured
Out[33]:
Label Uninsured Population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 399 percent of the poverty threshold >= 400% of poverty threshold Below 100 percent of the poverty threshold Population 18 to 64 years
Ascension 8934.0 518.0 798.0 653.0 2596.0 1633.0 1312.0 1424.0 0.0 0.0 ... 3093.0 1690.0 1615.0 2331.0 8934.0 2014.0 5562.0 1358.0 2014.0 NaN
Bossier 11465.0 97.0 1081.0 2256.0 2783.0 2015.0 1384.0 1849.0 0.0 0.0 ... 3466.0 1581.0 475.0 2753.0 11465.0 4445.0 4923.0 2097.0 4106.0 NaN
Caddo 14161.0 124.0 545.0 2440.0 3366.0 2542.0 2851.0 2281.0 12.0 0.0 ... 3502.0 3252.0 1059.0 2803.0 14161.0 4727.0 6179.0 3255.0 3044.0 NaN
Calcasieu 16265.0 611.0 1292.0 1783.0 5179.0 2311.0 3343.0 1306.0 296.0 144.0 ... 4959.0 2424.0 3410.0 1461.0 16265.0 4609.0 8030.0 3626.0 4228.0 NaN
East Baton Rougen Uninsured 33965.0 1438.0 1805.0 6445.0 8209.0 7297.0 4351.0 3681.0 498.0 241.0 ... 10454.0 4742.0 2462.0 5934.0 33706.0 13080.0 14845.0 5781.0 9547.0 NaN
Iberia 4247.0 0.0 594.0 665.0 460.0 909.0 389.0 1171.0 59.0 0.0 ... 720.0 922.0 872.0 465.0 4247.0 1489.0 1667.0 1091.0 894.0 NaN
Jefferson 42795.0 2347.0 5473.0 5321.0 8498.0 7459.0 7130.0 5936.0 421.0 210.0 ... 12303.0 10521.0 6067.0 6537.0 42777.0 13911.0 23601.0 5265.0 8798.0 NaN
Lafayette 17775.0 558.0 1174.0 1837.0 4406.0 4750.0 2682.0 2321.0 0.0 47.0 ... 4200.0 2553.0 3103.0 2732.0 17638.0 5668.0 9186.0 2784.0 3954.0 NaN
Lafourche 3495.0 90.0 194.0 876.0 473.0 450.0 967.0 413.0 32.0 0.0 ... 311.0 138.0 429.0 1313.0 3392.0 1471.0 1562.0 359.0 1182.0 NaN
Livingston 12635.0 592.0 2494.0 1727.0 3335.0 1609.0 1703.0 1175.0 0.0 0.0 ... 3621.0 1796.0 2096.0 2515.0 12398.0 4695.0 5645.0 2058.0 2941.0 NaN
Orleans 27314.0 489.0 2638.0 2711.0 7005.0 6106.0 4246.0 3453.0 559.0 107.0 ... 6018.0 3898.0 3826.0 4432.0 26769.0 12062.0 10700.0 4007.0 9176.0 NaN
Ouachita 12879.0 726.0 1616.0 1926.0 1717.0 3009.0 1778.0 1394.0 713.0 0.0 ... 2284.0 1974.0 2300.0 2978.0 12736.0 4260.0 5481.0 2995.0 1924.0 NaN
Rapides 11982.0 118.0 1613.0 1141.0 2093.0 2537.0 2190.0 2260.0 30.0 0.0 ... 3207.0 2236.0 997.0 2700.0 11982.0 3428.0 6459.0 2095.0 2447.0 NaN
St. Landry 8015.0 261.0 1914.0 779.0 507.0 2881.0 745.0 881.0 47.0 0.0 ... 2195.0 1864.0 829.0 1603.0 8015.0 2422.0 3694.0 1899.0 1595.0 NaN
St. Tammany 17512.0 207.0 2773.0 1938.0 4968.0 4625.0 1045.0 1766.0 190.0 0.0 ... 7048.0 2368.0 2333.0 2971.0 17512.0 7201.0 8002.0 2309.0 6352.0 NaN
Tangipahoa 9766.0 199.0 828.0 2346.0 1107.0 1719.0 735.0 2765.0 67.0 0.0 ... 2366.0 2733.0 2205.0 964.0 9678.0 2122.0 5403.0 2153.0 1329.0 NaN
Terrebonne 6903.0 392.0 342.0 1342.0 1644.0 579.0 1797.0 383.0 424.0 0.0 ... 1425.0 1667.0 333.0 2151.0 6903.0 2264.0 3226.0 1413.0 2066.0 NaN
US 28226882.0 1013971.0 3150717.0 4135054.0 6011961.0 5564469.0 4398639.0 3507090.0 335482.0 109499.0 ... 6813952.0 5750753.0 3760818.0 6505516.0 28002061.0 8955856.0 13877291.0 5168914.0 6336180.0 NaN

18 rows × 57 columns

health15_percent

In [34]:
health15_percent = pd.DataFrame(health15[health15.index.str.contains("%")])
health15_percent.rename(columns={"Civilian noninstitutionalized population": "Percent"}, inplace=True)
health15_percent
Out[34]:
Label Percent Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension Insured % 92.9 99.4 99.5 84.4 87.4 90.4 90.1 90.5 99.9 100.0 ... 82.5 86.0 91.0 91.9 98.8 92.9 80.2 85.0 91.4 98.8
Ascension Uninsured % 7.1 0.6 0.5 15.6 12.6 9.6 9.9 9.5 0.1 0.0 ... 17.5 14.0 9.0 8.1 1.2 7.1 19.8 15.0 8.6 1.2
Bossier Insured % 89.9 96.2 99.3 75.3 80.3 85.1 87.2 91.1 100.0 100.0 ... 82.5 89.4 89.5 92.9 93.9 89.9 81.7 90.6 88.8 95.3
Bossier Uninsured % 10.1 3.8 0.7 24.7 19.7 14.9 12.8 8.9 0.0 0.0 ... 17.5 10.6 10.5 7.1 6.1 10.1 18.3 9.4 11.2 4.7
Caddo Insured % 87.1 96.3 95.7 78.1 76.4 75.7 84.4 87.1 99.9 99.2 ... 82.2 85.2 86.3 92.3 94.4 87.1 82.4 85.5 85.9 94.2
Caddo Uninsured % 12.9 3.7 4.3 21.9 23.6 24.3 15.6 12.9 0.1 0.8 ... 17.8 14.8 13.7 7.7 5.6 12.9 17.6 14.5 14.1 5.8
Calcasieu Insured % 88.4 97.2 98.3 76.7 76.1 77.1 88.1 90.3 100.0 100.0 ... 85.2 86.8 87.4 88.8 93.4 88.4 81.9 89.2 87.6 94.1
Calcasieu Uninsured % 11.6 2.8 1.7 23.3 23.9 22.9 11.9 9.7 0.0 0.0 ... 14.8 13.2 12.6 11.2 6.6 11.6 18.1 10.8 12.4 5.9
East Baton Rouge Insured % 90.6 97.9 97.7 81.2 84.2 84.9 90.7 92.1 99.7 99.4 ... 87.6 85.7 89.5 95.2 95.1 90.5 86.8 82.8 89.4 96.1
East Baton Rouge Uninsured % 9.4 2.1 2.3 18.8 15.8 15.1 9.3 7.9 0.3 0.6 ... 12.4 14.3 10.5 4.8 4.9 9.5 13.2 17.2 10.6 3.9
Iberia Insured % 83.8 98.0 96.3 60.9 66.1 65.7 83.4 90.0 100.0 100.0 ... 79.9 77.0 86.5 87.8 91.6 83.8 74.3 80.3 85.0 93.5
Iberia Uninsured % 16.2 2.0 3.7 39.1 33.9 34.3 16.6 10.0 0.0 0.0 ... 20.1 23.0 13.5 12.2 8.4 16.2 25.7 19.7 15.0 6.5
Jefferson Insured % 86.9 94.3 96.5 71.0 75.4 77.6 86.1 89.8 99.4 99.7 ... 79.1 80.2 87.7 92.5 95.9 86.9 77.6 84.9 84.9 96.0
Jefferson Uninsured % 13.1 5.7 3.5 29.0 24.6 22.4 13.9 10.2 0.6 0.3 ... 20.9 19.8 12.3 7.5 4.1 13.1 22.4 15.1 15.1 4.0
Lafayette Insured % 88.5 98.0 98.1 79.0 79.4 80.7 87.2 88.9 99.4 100.0 ... 75.9 83.5 91.7 93.4 96.3 88.6 76.7 76.3 93.2 96.5
Lafayette Uninsured % 11.5 2.0 1.9 21.0 20.6 19.3 12.8 11.1 0.6 0.0 ... 24.1 16.5 8.3 6.6 3.7 11.4 23.3 23.7 6.8 3.5
Lafourche Insured % 89.5 99.1 98.2 92.2 73.5 91.5 83.4 82.5 100.0 100.0 ... 78.4 88.1 92.3 88.7 94.5 89.5 79.7 84.2 92.3 95.3
Lafourche Uninsured % 10.5 0.9 1.8 7.8 26.5 8.5 16.6 17.5 0.0 0.0 ... 21.6 11.9 7.7 11.3 5.5 10.5 20.3 15.8 7.7 4.7
Livingston Insured % 90.4 99.3 96.8 93.7 79.4 85.1 82.1 90.8 100.0 100.0 ... 75.8 89.3 90.1 97.8 96.6 90.4 73.8 94.9 92.2 96.0
Livingston Uninsured % 9.6 0.7 3.2 6.3 20.6 14.9 17.9 9.2 0.0 0.0 ... 24.2 10.7 9.9 2.2 3.4 9.6 26.2 5.1 7.8 4.0
Orleans Insured % 88.7 99.3 97.1 84.4 82.6 79.2 85.0 88.3 99.2 100.0 ... 84.1 84.8 88.7 94.2 95.1 88.5 83.7 82.9 88.2 96.0
Orleans Uninsured % 11.3 0.7 2.9 15.6 17.4 20.8 15.0 11.7 0.8 0.0 ... 15.9 15.2 11.3 5.8 4.9 11.5 16.3 17.1 11.8 4.0
Ouachita Insured % 87.3 96.2 95.4 80.4 75.9 77.8 85.4 87.2 98.2 99.7 ... 81.9 84.3 93.5 89.9 93.5 87.5 80.2 83.6 90.9 94.4
Ouachita Uninsured % 12.7 3.8 4.6 19.6 24.1 22.2 14.6 12.8 1.8 0.3 ... 18.1 15.7 6.5 10.1 6.5 12.5 19.8 16.4 9.1 5.6
Rapides Insured % 87.8 98.8 95.8 85.7 72.2 75.8 82.6 91.6 98.1 100.0 ... 81.6 81.1 92.2 92.7 96.3 87.7 80.0 83.5 90.0 95.6
Rapides Uninsured % 12.2 1.2 4.2 14.3 27.8 24.2 17.4 8.4 1.9 0.0 ... 18.4 18.9 7.8 7.3 3.7 12.3 20.0 16.5 10.0 4.4
St. Landry Insured % 83.6 91.9 92.4 77.4 69.1 72.2 82.4 77.4 100.0 96.8 ... 73.7 81.2 90.2 97.1 94.4 83.6 75.1 72.3 94.2 95.1
St. Landry Uninsured % 16.4 8.1 7.6 22.6 30.9 27.8 17.6 22.6 0.0 3.2 ... 26.3 18.8 9.8 2.9 5.6 16.4 24.9 27.7 5.8 4.9
St. Tammany Insured % 90.8 99.5 98.2 83.8 78.0 83.7 89.8 89.3 99.3 100.0 ... 80.3 88.9 89.4 91.9 96.8 90.8 79.3 86.7 91.3 96.6
St. Tammany Uninsured % 9.2 0.5 1.8 16.2 22.0 16.3 10.2 10.7 0.7 0.0 ... 19.7 11.1 10.6 8.1 3.2 9.2 20.7 13.3 8.7 3.4
Tangipahoa Insured % 87.7 100.0 100.0 81.8 71.0 72.7 89.4 86.5 100.0 100.0 ... 81.1 88.8 86.8 89.6 94.8 87.5 80.7 88.6 87.4 94.3
Tangipahoa Uninsured % 12.3 0.0 0.0 18.2 29.0 27.3 10.6 13.5 0.0 0.0 ... 18.9 11.2 13.2 10.4 5.2 12.5 19.3 11.4 12.6 5.7
Terrebonne Insured % 83.4 92.7 90.5 83.1 74.8 73.8 74.5 79.7 98.4 100.0 ... 74.7 74.2 88.2 96.9 91.9 83.4 68.3 80.8 87.9 96.0
Terrebonne Uninsured % 16.6 7.3 9.5 16.9 25.2 26.2 25.5 20.3 1.6 0.0 ... 25.3 25.8 11.8 3.1 8.1 16.6 31.7 19.2 12.1 4.0
US Insured % 90.6 96.0 94.8 85.0 82.5 85.5 88.9 92.1 99.0 99.4 ... 85.1 86.3 89.9 92.9 95.9 90.6 82.8 85.1 90.6 96.7
US Uninsured % 9.4 4.0 5.2 15.0 17.5 14.5 11.1 7.9 1.0 0.6 ... 14.9 13.7 10.1 7.1 4.1 9.4 17.2 14.9 9.4 3.3

36 rows × 58 columns

health15_percent_insured

In [35]:
health15_percent_insured = pd.DataFrame(health15_percent[health15_percent.index.str.contains("Insured")])
health15_percent_insured.rename(columns={"Percent": "Insured Percent"}, inplace=True)
health15_percent_insured.rename(index={
    "Ascension Insured %": "Ascension",
    "Bossier Insured %": "Bossier",
    "Caddo Insured %": "Caddo",
    "Calcasieu Insured %": "Calcasieu",
    "East Baton Rouge Insured %": "East Baton Rouge",
    "Iberia Insured %": "Iberia",
    "Jefferson Insured %": "Jefferson",
    "Lafayette Insured %": "Lafayette",
    "Lafourche Insured %": "Lafourche",
    "Livingston Insured %": "Livingston",
    "Orleans Insured %": "Orleans",
    "Ouachita Insured %": "Ouachita",
    "Rapides Insured %": "Rapides",
    "St. Landry Insured %": "St. Landry",
    "St. Tammany Insured %": "St. Tammany",
    "Tangipahoa Insured %": "Tangipahoa",
    "Terrebonne Insured %": "Terrebonne",
    "US Insured %": "US"
},inplace=True)
health15_percent_insured
Out[35]:
Label Insured Percent Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension 92.9 99.4 99.5 84.4 87.4 90.4 90.1 90.5 99.9 100.0 ... 82.5 86.0 91.0 91.9 98.8 92.9 80.2 85.0 91.4 98.8
Bossier 89.9 96.2 99.3 75.3 80.3 85.1 87.2 91.1 100.0 100.0 ... 82.5 89.4 89.5 92.9 93.9 89.9 81.7 90.6 88.8 95.3
Caddo 87.1 96.3 95.7 78.1 76.4 75.7 84.4 87.1 99.9 99.2 ... 82.2 85.2 86.3 92.3 94.4 87.1 82.4 85.5 85.9 94.2
Calcasieu 88.4 97.2 98.3 76.7 76.1 77.1 88.1 90.3 100.0 100.0 ... 85.2 86.8 87.4 88.8 93.4 88.4 81.9 89.2 87.6 94.1
East Baton Rouge 90.6 97.9 97.7 81.2 84.2 84.9 90.7 92.1 99.7 99.4 ... 87.6 85.7 89.5 95.2 95.1 90.5 86.8 82.8 89.4 96.1
Iberia 83.8 98.0 96.3 60.9 66.1 65.7 83.4 90.0 100.0 100.0 ... 79.9 77.0 86.5 87.8 91.6 83.8 74.3 80.3 85.0 93.5
Jefferson 86.9 94.3 96.5 71.0 75.4 77.6 86.1 89.8 99.4 99.7 ... 79.1 80.2 87.7 92.5 95.9 86.9 77.6 84.9 84.9 96.0
Lafayette 88.5 98.0 98.1 79.0 79.4 80.7 87.2 88.9 99.4 100.0 ... 75.9 83.5 91.7 93.4 96.3 88.6 76.7 76.3 93.2 96.5
Lafourche 89.5 99.1 98.2 92.2 73.5 91.5 83.4 82.5 100.0 100.0 ... 78.4 88.1 92.3 88.7 94.5 89.5 79.7 84.2 92.3 95.3
Livingston 90.4 99.3 96.8 93.7 79.4 85.1 82.1 90.8 100.0 100.0 ... 75.8 89.3 90.1 97.8 96.6 90.4 73.8 94.9 92.2 96.0
Orleans 88.7 99.3 97.1 84.4 82.6 79.2 85.0 88.3 99.2 100.0 ... 84.1 84.8 88.7 94.2 95.1 88.5 83.7 82.9 88.2 96.0
Ouachita 87.3 96.2 95.4 80.4 75.9 77.8 85.4 87.2 98.2 99.7 ... 81.9 84.3 93.5 89.9 93.5 87.5 80.2 83.6 90.9 94.4
Rapides 87.8 98.8 95.8 85.7 72.2 75.8 82.6 91.6 98.1 100.0 ... 81.6 81.1 92.2 92.7 96.3 87.7 80.0 83.5 90.0 95.6
St. Landry 83.6 91.9 92.4 77.4 69.1 72.2 82.4 77.4 100.0 96.8 ... 73.7 81.2 90.2 97.1 94.4 83.6 75.1 72.3 94.2 95.1
St. Tammany 90.8 99.5 98.2 83.8 78.0 83.7 89.8 89.3 99.3 100.0 ... 80.3 88.9 89.4 91.9 96.8 90.8 79.3 86.7 91.3 96.6
Tangipahoa 87.7 100.0 100.0 81.8 71.0 72.7 89.4 86.5 100.0 100.0 ... 81.1 88.8 86.8 89.6 94.8 87.5 80.7 88.6 87.4 94.3
Terrebonne 83.4 92.7 90.5 83.1 74.8 73.8 74.5 79.7 98.4 100.0 ... 74.7 74.2 88.2 96.9 91.9 83.4 68.3 80.8 87.9 96.0
US 90.6 96.0 94.8 85.0 82.5 85.5 88.9 92.1 99.0 99.4 ... 85.1 86.3 89.9 92.9 95.9 90.6 82.8 85.1 90.6 96.7

18 rows × 58 columns

health15_percent_uninsured

In [36]:
# Percentage Uninsured
health15_percent_uninsured = pd.DataFrame(health15_percent[health15_percent.index.str.contains("Uninsured")])
health15_percent_uninsured.rename(columns={"Percent": "Uninsured Percent"}, inplace=True)
health15_percent_uninsured.rename(index={
    "Ascension Uninsured %": "Ascension",
    "Bossier Uninsured %": "Bossier",
    "Caddo Uninsured %": "Caddo",
    "Calcasieu Uninsured %": "Calcasieu",
    "East Baton Rouge Uninsured %": "East Baton Rouge",
    "Iberia Uninsured %": "Iberia",
    "Jefferson Uninsured %": "Jefferson",
    "Lafayette Uninsured %": "Lafayette",
    "Lafourche Uninsured %": "Lafourche",
    "Livingston Uninsured %": "Livingston",
    "Orleans Uninsured %": "Orleans",
    "Ouachita Uninsured %": "Ouachita",
    "Rapides Uninsured %": "Rapides",
    "St. Landry Uninsured %": "St. Landry",
    "St. Tammany Uninsured %": "St. Tammany",
    "Tangipahoa Uninsured %": "Tangipahoa",
    "Terrebonne Uninsured %": "Terrebonne",
    "US Uninsured %": "US"
},inplace=True)
health15_percent_uninsured
Out[36]:
Label Uninsured Percent Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension 7.1 0.6 0.5 15.6 12.6 9.6 9.9 9.5 0.1 0.0 ... 17.5 14.0 9.0 8.1 1.2 7.1 19.8 15.0 8.6 1.2
Bossier 10.1 3.8 0.7 24.7 19.7 14.9 12.8 8.9 0.0 0.0 ... 17.5 10.6 10.5 7.1 6.1 10.1 18.3 9.4 11.2 4.7
Caddo 12.9 3.7 4.3 21.9 23.6 24.3 15.6 12.9 0.1 0.8 ... 17.8 14.8 13.7 7.7 5.6 12.9 17.6 14.5 14.1 5.8
Calcasieu 11.6 2.8 1.7 23.3 23.9 22.9 11.9 9.7 0.0 0.0 ... 14.8 13.2 12.6 11.2 6.6 11.6 18.1 10.8 12.4 5.9
East Baton Rouge 9.4 2.1 2.3 18.8 15.8 15.1 9.3 7.9 0.3 0.6 ... 12.4 14.3 10.5 4.8 4.9 9.5 13.2 17.2 10.6 3.9
Iberia 16.2 2.0 3.7 39.1 33.9 34.3 16.6 10.0 0.0 0.0 ... 20.1 23.0 13.5 12.2 8.4 16.2 25.7 19.7 15.0 6.5
Jefferson 13.1 5.7 3.5 29.0 24.6 22.4 13.9 10.2 0.6 0.3 ... 20.9 19.8 12.3 7.5 4.1 13.1 22.4 15.1 15.1 4.0
Lafayette 11.5 2.0 1.9 21.0 20.6 19.3 12.8 11.1 0.6 0.0 ... 24.1 16.5 8.3 6.6 3.7 11.4 23.3 23.7 6.8 3.5
Lafourche 10.5 0.9 1.8 7.8 26.5 8.5 16.6 17.5 0.0 0.0 ... 21.6 11.9 7.7 11.3 5.5 10.5 20.3 15.8 7.7 4.7
Livingston 9.6 0.7 3.2 6.3 20.6 14.9 17.9 9.2 0.0 0.0 ... 24.2 10.7 9.9 2.2 3.4 9.6 26.2 5.1 7.8 4.0
Orleans 11.3 0.7 2.9 15.6 17.4 20.8 15.0 11.7 0.8 0.0 ... 15.9 15.2 11.3 5.8 4.9 11.5 16.3 17.1 11.8 4.0
Ouachita 12.7 3.8 4.6 19.6 24.1 22.2 14.6 12.8 1.8 0.3 ... 18.1 15.7 6.5 10.1 6.5 12.5 19.8 16.4 9.1 5.6
Rapides 12.2 1.2 4.2 14.3 27.8 24.2 17.4 8.4 1.9 0.0 ... 18.4 18.9 7.8 7.3 3.7 12.3 20.0 16.5 10.0 4.4
St. Landry 16.4 8.1 7.6 22.6 30.9 27.8 17.6 22.6 0.0 3.2 ... 26.3 18.8 9.8 2.9 5.6 16.4 24.9 27.7 5.8 4.9
St. Tammany 9.2 0.5 1.8 16.2 22.0 16.3 10.2 10.7 0.7 0.0 ... 19.7 11.1 10.6 8.1 3.2 9.2 20.7 13.3 8.7 3.4
Tangipahoa 12.3 0.0 0.0 18.2 29.0 27.3 10.6 13.5 0.0 0.0 ... 18.9 11.2 13.2 10.4 5.2 12.5 19.3 11.4 12.6 5.7
Terrebonne 16.6 7.3 9.5 16.9 25.2 26.2 25.5 20.3 1.6 0.0 ... 25.3 25.8 11.8 3.1 8.1 16.6 31.7 19.2 12.1 4.0
US 9.4 4.0 5.2 15.0 17.5 14.5 11.1 7.9 1.0 0.6 ... 14.9 13.7 10.1 7.1 4.1 9.4 17.2 14.9 9.4 3.3

18 rows × 58 columns

health15_total

In [37]:
# Get the numeric insurance data
h = health15[~health15.index.str.contains("%")]
In [38]:
# Get the totals
health15_total = pd.DataFrame(h[h.index.str.contains("Total")])
health15_total.rename(columns={"Civilian noninstitutionalized population": "Total Citizens"}, inplace=True)
health15_total.rename(index={
    "Ascension Total": "Ascension",
    "Bossier Total": "Bossier",
    "Caddo Total": "Caddo",
    "Calcasieu Total": "Calcasieu",
    "East Baton Rouge Total": "East Baton Rouge",
    "Iberia Total": "Iberia",
    "Jefferson Total": "Jefferson",
    "Lafayette Total": "Lafayette",
    "Lafourche Total": "Lafourche",
    "Livingston Total": "Livingston",
    "Orleans Total": "Orleans",
    "Ouachita Total": "Ouachita",
    "Rapides Total": "Rapides",
    "St. Landry Total": "St. Landry",
    "St. Tammany Total": "St. Tammany",
    "Tangipahoa Total": "Tangipahoa",
    "Terrebonne Total": "Terrebonne",
    "US Total": "US"
},inplace=True)
health15_total
Out[38]:
Label Total Citizens Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension 118671.0 10276.0 22631.0 10193.0 17116.0 17484.0 15404.0 13455.0 7735.0 4377.0 ... 13045.0 18731.0 15854.0 17155.0 53797.0 118671.0 16267.0 10934.0 33430.0 58040.0
Bossier 119348.0 10475.0 20897.0 9694.0 18554.0 14572.0 15488.0 14161.0 8807.0 6700.0 ... 20945.0 26019.0 22443.0 17012.0 32670.0 119173.0 24916.0 14986.0 35870.0 43401.0
Caddo 246894.0 20848.0 40607.0 22025.0 34633.0 28932.0 30720.0 32726.0 21124.0 15279.0 ... 67525.0 56789.0 40668.0 34037.0 46534.0 245985.0 77076.0 29399.0 69947.0 69563.0
Calcasieu 196063.0 16457.0 32569.0 17929.0 28602.0 23362.0 24537.0 25015.0 15793.0 11799.0 ... 38916.0 50585.0 33195.0 25904.0 46060.0 193913.0 48118.0 27957.0 58505.0 59333.0
East Baton Rouge 443734.0 34596.0 66926.0 64847.0 66150.0 51174.0 50984.0 52340.0 33683.0 23034.0 ... 91511.0 94607.0 72796.0 48796.0 128542.0 437059.0 114217.0 45042.0 117242.0 160558.0
Iberia 73312.0 6345.0 13314.0 7306.0 9853.0 7073.0 10049.0 9435.0 5923.0 4014.0 ... 16657.0 18829.0 13241.0 9002.0 15507.0 73160.0 21003.0 7646.0 24043.0 20468.0
Jefferson 432623.0 32336.0 62391.0 35304.0 63359.0 53770.0 58965.0 60233.0 38538.0 27727.0 ... 81769.0 106276.0 78504.0 58653.0 106544.0 431486.0 104896.0 43423.0 135213.0 147954.0
Lafayette 237855.0 19414.0 38443.0 24324.0 39316.0 30283.0 30380.0 29028.0 15685.0 10982.0 ... 50710.0 39339.0 39752.0 32066.0 73211.0 235243.0 60658.0 21807.0 69627.0 83151.0
Lafourche 97549.0 8070.0 15163.0 8864.0 14413.0 11859.0 13792.0 11976.0 7907.0 5505.0 ... 14103.0 23388.0 22299.0 10795.0 25645.0 96257.0 19720.0 15264.0 28559.0 32714.0
Livingston 136856.0 10826.0 25882.0 11681.0 19742.0 17902.0 18417.0 15961.0 10750.0 5695.0 ... 27700.0 20616.0 22186.0 20307.0 45961.0 136794.0 26993.0 15339.0 39316.0 55146.0
Orleans 384964.0 28197.0 51142.0 37395.0 70584.0 49453.0 49449.0 51316.0 28761.0 18667.0 ... 108808.0 86340.0 51259.0 41380.0 89471.0 378954.0 122147.0 43081.0 98104.0 115622.0
Ouachita 153147.0 13302.0 26184.0 15723.0 21448.0 18776.0 18682.0 18207.0 11734.0 9091.0 ... 41554.0 41592.0 21070.0 13876.0 32860.0 150807.0 47426.0 21429.0 40489.0 41463.0
Rapides 129381.0 10938.0 21943.0 11503.0 16711.0 16902.0 15581.0 16443.0 11599.0 7761.0 ... 33034.0 29838.0 27254.0 13985.0 23454.0 128168.0 40205.0 12175.0 41330.0 34458.0
St. Landry 82786.0 7203.0 15413.0 7036.0 9639.0 10080.0 10629.0 10798.0 7214.0 4774.0 ... 27331.0 22172.0 13193.0 6716.0 13183.0 82380.0 31205.0 13441.0 21704.0 16030.0
St. Tammany 247529.0 17494.0 43282.0 17957.0 28857.0 31766.0 35265.0 34859.0 23046.0 15003.0 ... 34824.0 50278.0 44478.0 35634.0 82022.0 246553.0 46002.0 26629.0 70740.0 103182.0
Tangipahoa 128060.0 10612.0 21554.0 15600.0 16816.0 15277.0 16050.0 16066.0 10045.0 6040.0 ... 35499.0 25704.0 20956.0 17970.0 25014.0 124973.0 40127.0 14078.0 31981.0 38787.0
Terrebonne 112565.0 9875.0 20262.0 10669.0 15987.0 13927.0 13950.0 14021.0 8364.0 5510.0 ... 25119.0 29682.0 16030.0 14198.0 27328.0 112130.0 33601.0 14775.0 32318.0 31436.0
US 316450569.0 23746599.0 49745332.0 30571816.0 42769883.0 40032167.0 42609478.0 40538272.0 27289273.0 19147749.0 ... 51281973.0 66138622.0 57325411.0 43043638.0 94862617.0 312780720.0 68091759.0 35237726.0 93261064.0 116190171.0

18 rows × 58 columns

health15_insured

In [39]:
# Get numbers of insured
health15_insured = pd.DataFrame(h[h.index.str.contains("Insured")])
health15_insured.rename(index={
    "Ascension Insured": "Ascension",
    "Bossier Insured": "Bossier",
    "Caddo Insured": "Caddo",
    "Calcasieu Insured": "Calcasieu",
    "East Baton Rouge Insured": "East Baton Rouge",
    "Iberia Insured": "Iberia",
    "Jefferson Insured": "Jefferson",
    "Lafayette Insured": "Lafayette",
    "Lafourche Insured": "Lafourche",
    "Livingston Insured": "Livingston",
    "Orleans Insured": "Orleans",
    "Ouachita Insured": "Ouachita",
    "Rapides Insured": "Rapides",
    "St. Landry Insured": "St. Landry",
    "St. Tammany Insured": "St. Tammany",
    "Tangipahoa Insured": "Tangipahoa",
    "Terrebonne Insured": "Terrebonne",
    "US Insured": "US"
},inplace=True)
health15_insured=health15_insured.rename(columns={"Civilian noninstitutionalized population": "Insured Population"})
health15_insured
Out[39]:
Label Insured Population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension 110276.0 10219.0 22527.0 8600.0 14959.0 15806.0 13880.0 12178.0 7730.0 4377.0 ... 10760.0 16100.0 14430.0 15772.0 53143.0 110276.0 13047.0 9296.0 30567.0 57366.0
Bossier 107351.0 10080.0 20753.0 7302.0 14897.0 12400.0 13506.0 12906.0 8807.0 6700.0 ... 17280.0 23267.0 20082.0 15801.0 30674.0 107176.0 20348.0 13584.0 31862.0 41382.0
Caddo 215149.0 20078.0 38847.0 17205.0 26453.0 21906.0 25914.0 28500.0 21093.0 15153.0 ... 55505.0 48374.0 35083.0 31400.0 43918.0 214240.0 63486.0 25149.0 60098.0 65507.0
Calcasieu 173378.0 16002.0 32020.0 13746.0 21775.0 18022.0 21626.0 22595.0 15793.0 11799.0 ... 33140.0 43910.0 28997.0 22994.0 43010.0 171445.0 39410.0 24929.0 51275.0 55831.0
East Baton Rouge 401908.0 33860.0 65392.0 52674.0 55692.0 43424.0 46219.0 48181.0 33570.0 22896.0 ... 80121.0 81103.0 65117.0 46440.0 122181.0 395579.0 99197.0 37307.0 104771.0 154304.0
Iberia 61453.0 6215.0 12826.0 4452.0 6511.0 4644.0 8376.0 8492.0 5923.0 4014.0 ... 13309.0 14504.0 11454.0 7900.0 14210.0 61301.0 15597.0 6136.0 20427.0 19141.0
Jefferson 376033.0 30480.0 60217.0 25072.0 47799.0 41703.0 50756.0 54081.0 38290.0 27635.0 ... 64714.0 85225.0 68859.0 54251.0 102175.0 375078.0 81432.0 36845.0 114786.0 142015.0
Lafayette 210482.0 19028.0 37707.0 19214.0 31234.0 24435.0 26479.0 25812.0 15591.0 10982.0 ... 38466.0 32857.0 36439.0 29942.0 70521.0 208341.0 46553.0 16633.0 64908.0 80247.0
Lafourche 87297.0 7998.0 14887.0 8169.0 10595.0 10856.0 11505.0 9875.0 7907.0 5505.0 ... 11061.0 20614.0 20575.0 9578.0 24230.0 86114.0 15725.0 12853.0 26363.0 31173.0
Livingston 123708.0 10749.0 25055.0 10940.0 15672.0 15232.0 15122.0 14493.0 10750.0 5695.0 ... 20994.0 18418.0 19983.0 19859.0 44380.0 123646.0 19914.0 14557.0 36235.0 52940.0
Orleans 341275.0 28008.0 49654.0 31571.0 58302.0 39160.0 42052.0 45330.0 28531.0 18667.0 ... 91533.0 73187.0 45464.0 38972.0 85091.0 335347.0 102184.0 35715.0 86484.0 110964.0
Ouachita 133739.0 12801.0 24975.0 12640.0 16288.0 14608.0 15955.0 15884.0 11522.0 9066.0 ... 34017.0 35050.0 19696.0 12474.0 30725.0 131903.0 38046.0 17925.0 36787.0 39145.0
Rapides 113638.0 10809.0 21014.0 9854.0 12068.0 12815.0 12870.0 15064.0 11383.0 7761.0 ... 26969.0 24195.0 25138.0 12962.0 22596.0 112463.0 32146.0 10169.0 37198.0 32950.0
St. Landry 69194.0 6622.0 14241.0 5447.0 6659.0 7277.0 8759.0 8354.0 7214.0 4621.0 ... 20134.0 18010.0 11906.0 6519.0 12444.0 68856.0 23450.0 9719.0 20450.0 15237.0
St. Tammany 224772.0 17406.0 42513.0 15054.0 22511.0 26584.0 31682.0 31124.0 22895.0 15003.0 ... 27974.0 44675.0 39779.0 32754.0 79430.0 223796.0 36486.0 23084.0 64553.0 99673.0
Tangipahoa 112313.0 10612.0 21554.0 12761.0 11943.0 11104.0 14354.0 13900.0 10045.0 6040.0 ... 28792.0 22832.0 18190.0 16095.0 23710.0 109381.0 32365.0 12479.0 27957.0 36580.0
Terrebonne 93917.0 9157.0 18340.0 8867.0 11960.0 10283.0 10398.0 11171.0 8231.0 5510.0 ... 18753.0 22032.0 14137.0 13762.0 25101.0 93482.0 22943.0 11935.0 28411.0 30193.0
US 286693025.0 22795315.0 47162631.0 25990137.0 35290681.0 34214331.0 37863314.0 37331595.0 27009619.0 19035402.0 ... 43630639.0 57066212.0 51533624.0 39976592.0 91003092.0 283223843.0 56399632.0 29999621.0 84506859.0 112317731.0

18 rows × 58 columns

health15_uninsured

In [40]:
# Get numbers of Uninsured
health15_insur_LA_uninsured = pd.DataFrame(h[h.index.str.contains("Uninsured")])
health15_insur_LA_uninsured.rename(index={
    "Ascension Uninsured": "Ascension",
    "Bossier Uninsured": "Bossier",
    "Caddo Uninsured": "Caddo",
    "Calcasieu Uninsured": "Calcasieu",
    "East Baton Rouge Uninsured": "East Baton Rouge",
    "Iberia Uninsured": "Iberia",
    "Jefferson Uninsured": "Jefferson",
    "Lafayette Uninsured": "Lafayette",
    "Lafourche Uninsured": "Lafourche",
    "Livingston Uninsured": "Livingston",
    "Orleans Uninsured": "Orleans",
    "Ouachita Uninsured": "Ouachita",
    "Rapides Uninsured": "Rapides",
    "St. Landry Uninsured": "St. Landry",
    "St. Tammany Uninsured": "St. Tammany",
    "Tangipahoa Uninsured": "Tangipahoa",
    "Terrebonne Uninsured": "Terrebonne",
    "US Uninsured": "US"
},inplace=True)
health15_uninsured=health15_insur_LA_uninsured.rename(columns={"Civilian noninstitutionalized population": "Uninsured Population"})
health15_uninsured
Out[40]:
Label Uninsured Population Age: <6 Age: 6-17 Age: 18-24 Age: 25-34 Age: 35-44 Age: 45-54 Age: 55-64 Age: 65-74 Age: 75+ ... Under $25,000 $25,000 to $49,999 $50,000 to $74,999 $75,000 to $99,999 $100,000 and over Pop where poverty status determined < 138% of poverty threshold 138 to 199 percent of the poverty threshold 200 to 399 percent of the poverty threshold >= 400% of poverty threshold
Ascension 8395.0 57.0 104.0 1593.0 2157.0 1678.0 1524.0 1277.0 5.0 0.0 ... 2285.0 2631.0 1424.0 1383.0 654.0 8395.0 3220.0 1638.0 2863.0 674.0
Bossier 11997.0 395.0 144.0 2392.0 3657.0 2172.0 1982.0 1255.0 0.0 0.0 ... 3665.0 2752.0 2361.0 1211.0 1996.0 11997.0 4568.0 1402.0 4008.0 2019.0
Caddo 31745.0 770.0 1760.0 4820.0 8180.0 7026.0 4806.0 4226.0 31.0 126.0 ... 12020.0 8415.0 5585.0 2637.0 2616.0 31745.0 13590.0 4250.0 9849.0 4056.0
Calcasieu 22685.0 455.0 549.0 4183.0 6827.0 5340.0 2911.0 2420.0 0.0 0.0 ... 5776.0 6675.0 4198.0 2910.0 3050.0 22468.0 8708.0 3028.0 7230.0 3502.0
East Baton Rougen Uninsured 41826.0 736.0 1534.0 12173.0 10458.0 7750.0 4765.0 4159.0 113.0 138.0 ... 11390.0 13504.0 7679.0 2356.0 6361.0 41480.0 15020.0 7735.0 12471.0 6254.0
Iberia 11859.0 130.0 488.0 2854.0 3342.0 2429.0 1673.0 943.0 0.0 0.0 ... 3348.0 4325.0 1787.0 1102.0 1297.0 11859.0 5406.0 1510.0 3616.0 1327.0
Jefferson 56590.0 1856.0 2174.0 10232.0 15560.0 12067.0 8209.0 6152.0 248.0 92.0 ... 17055.0 21051.0 9645.0 4402.0 4369.0 56408.0 23464.0 6578.0 20427.0 5939.0
Lafayette 27373.0 386.0 736.0 5110.0 8082.0 5848.0 3901.0 3216.0 94.0 0.0 ... 12244.0 6482.0 3313.0 2124.0 2690.0 26902.0 14105.0 5174.0 4719.0 2904.0
Lafourche 10252.0 72.0 276.0 695.0 3818.0 1003.0 2287.0 2101.0 0.0 0.0 ... 3042.0 2774.0 1724.0 1217.0 1415.0 10143.0 3995.0 2411.0 2196.0 1541.0
Livingston 13148.0 77.0 827.0 741.0 4070.0 2670.0 3295.0 1468.0 0.0 0.0 ... 6706.0 2198.0 2203.0 448.0 1581.0 13148.0 7079.0 782.0 3081.0 2206.0
Orleans 43689.0 189.0 1488.0 5824.0 12282.0 10293.0 7397.0 5986.0 230.0 0.0 ... 17275.0 13153.0 5795.0 2408.0 4380.0 43607.0 19963.0 7366.0 11620.0 4658.0
Ouachita 19408.0 501.0 1209.0 3083.0 5160.0 4168.0 2727.0 2323.0 212.0 25.0 ... 7537.0 6542.0 1374.0 1402.0 2135.0 18904.0 9380.0 3504.0 3702.0 2318.0
Rapides 15743.0 129.0 929.0 1649.0 4643.0 4087.0 2711.0 1379.0 216.0 0.0 ... 6065.0 5643.0 2116.0 1023.0 858.0 15705.0 8059.0 2006.0 4132.0 1508.0
St. Landry 13592.0 581.0 1172.0 1589.0 2980.0 2803.0 1870.0 2444.0 0.0 153.0 ... 7197.0 4162.0 1287.0 197.0 739.0 13524.0 7755.0 3722.0 1254.0 793.0
St. Tammany 22757.0 88.0 769.0 2903.0 6346.0 5182.0 3583.0 3735.0 151.0 0.0 ... 6850.0 5603.0 4699.0 2880.0 2592.0 22757.0 9516.0 3545.0 6187.0 3509.0
Tangipahoa 15747.0 0.0 0.0 2839.0 4873.0 4173.0 1696.0 2166.0 0.0 0.0 ... 6707.0 2872.0 2766.0 1875.0 1304.0 15592.0 7762.0 1599.0 4024.0 2207.0
Terrebonne 18648.0 718.0 1922.0 1802.0 4027.0 3644.0 3552.0 2850.0 133.0 0.0 ... 6366.0 7650.0 1893.0 436.0 2227.0 18648.0 10658.0 2840.0 3907.0 1243.0
US 29757544.0 951284.0 2582701.0 4581679.0 7479202.0 5817836.0 4746164.0 3206677.0 279654.0 112347.0 ... 7651334.0 9072410.0 5791787.0 3067046.0 3859525.0 29556877.0 11692127.0 5238105.0 8754205.0 3872440.0

18 rows × 58 columns

Now we have tables we can work with. Lets look at a graph and see if we can pick out any patterns of interest

Above we have outlined the general workflow that will be performed on our other dataset so we can move on to more in depth analysis

3. Data EDA: Exploratory Data Analysis

Lets start our analysis by doing some EDA on both the post Medicaid expansion dataset and the pre Medicaid expansion dataset. To begin, lets get some initial comparisons of population size and number of insured people.

Population vs Insurance

In [41]:
fig, (ax2,ax1) = plt.subplots(1,2, figsize=(25,10))
fig.suptitle('Population vs Insurance', fontsize=30)
total_pop=pd.DataFrame(health21_total["Total Citizens"])
insured=pd.DataFrame(health21_insured["Insured Population"])
pop_insur=total_pop.join(insured,how="outer")
pop_insur.drop("US",inplace=True)
pop_insur.sort_values(by="Total Citizens",inplace=True)
pop_insur.plot.bar(stacked=True, color={"Total Citizens": "plum","Insured Population": "yellowgreen"},ax = ax1)
ax1.set_xlabel("Louisiana Parishes",fontsize=14)
ax1.set_ylabel("# of Citizens",fontsize=14)
ax1.set_title('Post Medicaid Expansion',fontsize = 25)


total_pop1=pd.DataFrame(health15_total["Total Citizens"])
insured1=pd.DataFrame(health15_insured["Insured Population"])
pop_insur1=total_pop.join(insured,how="outer")
pop_insur1.drop("US",inplace=True)
pop_insur1.sort_values(by="Total Citizens",inplace=True)
pop_insur1.plot.bar(stacked=True,color={"Total Citizens": "plum","Insured Population": "yellowgreen"}, ax = ax2)
ax2.set_xlabel("Louisiana Parishes",fontsize=14)
ax2.set_ylabel("# of Citizens",fontsize=14)
ax2.set_title('Pre Medicaid Expansion',fontsize = 25)
Out[41]:
Text(0.5, 1.0, 'Pre Medicaid Expansion')

Looking at both of the graphs, it seems like both for pre Medicaid and post Medicaid expansion, the total population in each parish is roughly equal to the number of insured citizens. Does this mean that Medicaid expansion didn't have an effect? Not necessarily, especially because here we are just comparing raw numbers and not percentages.

Insurance vs Age

In [42]:
ages21=health21_insured.sort_values(by="Insured Population",inplace=False)
ages21=ages21.filter(like="Age")
ages21=ages21.transpose()
ages21=ages21["US"]
In [43]:
ages15=health15_insured.sort_values(by="Insured Population",inplace=False)
ages15=ages15.filter(like="Age")
ages15=ages15.transpose()
ages15=ages15["US"]
fig=plt.figure()
ax=fig.add_subplot(111)
ax2=ax.twinx()
width=0.3
ages15.plot(kind='bar',color='plum',ax=ax,width=width,position=1,figsize=(10,7))
ages21.plot(kind='bar',color='yellowgreen',ax=ax,width=width,position=0,figsize=(10,7))
ax.set_ylabel("# Insured Citizens")
ax.set_xlabel("Ages")
ax.set_title("Insured Age Groups Pre v Post Medicaid Expansion",fontsize=15)
ax.legend(["2015","2021"],loc='best')
plt.show()

Something to note here, is that the number of insured citizens for the age group 6-17 is higher in the post Medicaid expansion vs the pre Medicaid expansion graph. Another aspect of this that is important to note is that the numbers of insured people went up post Medicaid expansion. This could be due to population growth but it is possible that Medicaid expansion had a measurable effect.

Uninsured vs Age

In [44]:
ages21=health21_uninsured.sort_values(by="Uninsured Population",inplace=False)
ages21=ages21.filter(like="Age")
ages21=ages21.transpose()
ages21=ages21["US"]
In [45]:
ages15=health15_uninsured.sort_values(by="Uninsured Population",inplace=False)
ages15=ages15.filter(like="Age")
ages15=ages15.transpose()
ages15=ages15["US"]
fig=plt.figure()
ax=fig.add_subplot(111)
ax2=ax.twinx()
width=0.3
ages15.plot(kind='bar',color='plum',ax=ax,width=width,position=1,figsize=(10,7))
ages21.plot(kind='bar',color='yellowgreen',ax=ax,width=width,position=0)
ax.set_ylabel("# Uninsured Citizens")
ax.set_xlabel("Ages")
ax.set_title("Uninsured Age Groups Pre v Post Medicaid Expansion",fontsize=20)
ax.legend(["2015","2021"],loc='best')
plt.show()

Again the different is subtle, but it is noticable. The pre Medicaid expansion graph seems to peak at a higher point than the post Medicaid expansion graph. Since the graph is depicting number of uninsured citizens, it seems that Medicaid expansion could possibly have reduced the number of uninsured people, particularly in the age range of 25-34.

In [46]:
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(25,10))
fig.suptitle('Sex vs Insurance', fontsize=30)

sex=health21_insured.sort_values(by="Insured Population",inplace=False)
sex=sex.filter(like="ale")
sex.drop("US",inplace=True)
sex=sex.drop(sex.filter(like="reference"),axis=1)
sex=sex.drop(sex.filter(like="grad"),axis=1)
sex.plot.bar(stacked=False,color={"Male": "royalblue","Female": "lightpink"},ax=ax2)
ax2.set_xlabel("Parish",fontsize=14)
ax2.set_ylabel("# of Insured Citizens",fontsize=14)
ax2.set_title('2021',fontsize = 25)
sex=health15_insured.sort_values(by="Insured Population",inplace=False)
sex=sex.filter(like="ale")
sex.drop("US",inplace=True)
sex=sex.drop(sex.filter(like="reference"),axis=1)
sex=sex.drop(sex.filter(like="grad"),axis=1)
sex.plot.bar(stacked=False,color={"Male": "royalblue","Female": "lightpink"},ax=ax1)
ax1.set_xlabel("Parish",fontsize=14)
ax1.set_ylabel("# of Insured Citizens",fontsize=14)
ax1.set_title('2015',fontsize = 25)
#plt.show()
Out[46]:
Text(0.5, 1.0, '2015')

Here it doesn't look like there is much of a different between the numbers of insured by sex across the different parishes between pre Medicaid expansion and post Medicaid expansion. What is interesting, though, is that females are more insured than males in every single parish in both datasets, and there are many more insured people in East Baton Rouge than there are in Iberia (However this might be because there are just more people in East Baton Rouge).

Raw numbers are great. However, it is possible that the differences between the pre Medicaid expansion and post Medicaid expansion graphs are due to population growth or other outside factors that affect population size. To get aroud this, lets take a look at a comparison of the two datasets but this time lets use percentages instead of the numbers themselves.

In [47]:
ages21=health21_percent_insured.sort_values(by="Insured Percent",inplace=False)
ages21=ages21.filter(like="Age")
ages21=ages21.transpose()
ages21=ages21["US"]
In [48]:
ages15=health15_percent_insured.sort_values(by="Insured Percent",inplace=False)
ages15=ages15.filter(like="Age")
ages15=ages15.transpose()
ages15=ages15["US"]
fig=plt.figure()
ax=fig.add_subplot(111)
ax2=ax.twinx()
width=0.3
ages15.plot(kind='bar',color='plum',ax=ax,width=width,position=1,figsize=(10,7))
ages21.plot(kind='bar',color='yellowgreen',ax=ax,width=width,position=0,figsize=(10,7))
ax.set_ylabel("% Insured Citizens")
ax.set_xlabel("Ages")
ax.set_title("Insured % Age Groups Pre v Post Medicaid Expansion",fontsize=20)
ax.legend(["2015","2021"],loc='best')
plt.show()

These graphs look pretty similar. This might be because there are just subtle differences in the percentages between the two timeframes. Lets look at the uninsurance rates between pre and post Medicaid expansion to see if there are more noticable differences

In [49]:
ages21=health21_percent_uninsured.sort_values(by="Uninsured Percent",inplace=False)
ages21=ages21.filter(like="Age")
ages21=ages21.transpose()
ages21=ages21["US"]
In [50]:
ages15=health15_percent_uninsured.sort_values(by="Uninsured Percent",inplace=False)
ages15=ages15.filter(like="Age")
ages15=ages15.transpose()
ages15=ages15["US"]
fig=plt.figure()
ax=fig.add_subplot(111)
ax2=ax.twinx()
width=0.3
ages15.plot(kind='bar',color='plum',ax=ax,width=width,position=1,figsize=(10,7))
ages21.plot(kind='bar',color='yellowgreen',ax=ax,width=width,position=0,figsize=(10,7))
ax.set_ylabel("% Uninsured Citizens")
ax.set_xlabel("Ages")
ax.set_title("Uninsured % Age Groups Pre v Post Medicaid Expansion",fontsize=20)
ax.legend(["2015","2021"],loc='best')
plt.show()

Now the difference is much more noticable! According to these graphs, it looks like there is a difference in the percentages of people uninsured, perticularly in the 18-34 age ranges. Whats interesting is that it looks like the percentage in the 55-64, under 6, and the 6-18 age ranges actually went up after Medicaid expansion. This warrents more investigation.

In [51]:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(1,1, figsize=(18,10))
sex=health15_percent_uninsured.sort_values(by="Uninsured Percent",inplace=False)
sex=sex.filter(like="ale")
sex.drop("US",inplace=True)
sex=sex.drop(sex.filter(like="reference"),axis=1)
sex=sex.drop(sex.filter(like="grad"),axis=1)
sex1=health21_percent_uninsured.sort_values(by="Uninsured Percent",inplace=False)
sex1.drop("US",inplace=True)
sex1 = sex1.reindex(["Ascension", "St. Tammany", "East Baton Rouge", 
             "Livingston", "Bossier", "Lafourche",
             "Orleans","Lafayette","Calcasieu",
             "Rapides","Tangipahoa","Ouachita", 
             "Caddo", "Jefferson", "Iberia","St. Landry", "Terrebonne"])
sex1=sex1.filter(like="ale")
sex1=sex1.drop(sex1.filter(like="reference"),axis=1)
sex1=sex1.drop(sex1.filter(like="grad"),axis=1)
sex2 = sex1.join(sex, how='outer', lsuffix='_2021', rsuffix='_2015')
sex2=sex2[["Female_2015","Female_2021","Male_2015","Male_2021"]]
sex2.plot.bar(stacked=False, color={"Male_2021": "royalblue","Female_2021": "magenta", "Male_2015": "darkblue", "Female_2015": "plum"}, ax = ax)
ax.set_ylabel("% Uninsured Citizens", fontsize = 15)
ax.set_xlabel("Parish", fontsize = 15)
ax.set_title("Uninsured Percent by Parish", fontsize = 25)
Out[51]:
Text(0.5, 1.0, 'Uninsured Percent by Parish')

When looking at the rates of uninsured people by parish and stratifying by sex, it looks like women were starting from a better place than men were (They already had lower rates of uninsurance as a group than men did in 2015). Even after Medicaid expansion, it seems like men still had higher rates overall of uninsured people as a group than women did. Despite this, Medicaid expansion seems to have reduced rates of uninsured people in every parish.

4. Which factors were affected the most by Medicaid expansion?

While it is helpful to visualize the difference between the various rates in the 2015 and the 2021 dataset, we are more interested in seeing how the adoption of Medicaid expansion changed the makeup of the insured and the uninsured populations in Louisiana.

Feature Weights Uninsured %

Below, we are grabbing only the features shared by both datasets (some differ slightly), and putting them in order to be readable.

In [52]:
#uninsured_features = list(set(health21_percent_uninsured.columns) & set(health15_percent_uninsured.columns))
#insured_features = list(set(health21_percent_insured.columns) & set(health15_percent_insured.columns))
uninsured_features=['Population 18 to 64 years','>= 400% of poverty threshold','< 138% of poverty threshold','Pop where poverty status determined',
                    '$100,000 and over','$75,000 to $99,999','$50,000 to $74,999', '$50,000 to $74,999','$25,000 to $49,999','$25,000 to $49,999','Under $25,000','Total household population','Did not work','Worked < full-time in past 12 months',
                     'Not in labor force','Unemployed','Employed','In labor force',"Bachelor's degree or higher","Some college or associate's degree",'High school grad','Less than high school graduate','Population 26 years and over',
                     'No disability','With a disability','Non-family household/Other','Female reference, no spouse','Male reference, no spouse','In other families','In married couple families','In family households',
                    'White alone, not Hispanic or Latino','Black or African American alone','White alone','Female','Male','Age: 75+','Age: 65-74','Age: 55-64','Age: 45-54', 'Age: 35-44',"Age: 25-34","Age: 18-24",'Uninsured Percent',"Age: <6"]
insured_features=['Population 18 to 64 years','>= 400% of poverty threshold','< 138% of poverty threshold','Pop where poverty status determined',
                    '$100,000 and over','$75,000 to $99,999','$50,000 to $74,999', '$50,000 to $74,999','$25,000 to $49,999','$25,000 to $49,999','Under $25,000','Total household population','Did not work','Worked < full-time in past 12 months',
                     'Not in labor force','Unemployed','Employed','In labor force',"Bachelor's degree or higher","Some college or associate's degree",'High school grad','Less than high school graduate','Population 26 years and over',
                     'No disability','With a disability','Non-family household/Other','Female reference, no spouse','Male reference, no spouse','In other families','In married couple families','In family households',
                    'White alone, not Hispanic or Latino','Black or African American alone','White alone','Female','Male','Age: 75+','Age: 65-74','Age: 55-64','Age: 45-54', 'Age: 35-44',"Age: 25-34","Age: 18-24",'Insured Percent',"Age: <6"]
In [53]:
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(16,28),sharey=False)
fig.suptitle('Feature Weights Uninsured %', fontsize=20, y=1.02)

Y_train_15 = health15_percent_uninsured[uninsured_features]["Uninsured Percent"].copy()
X_train_15 = health15_percent_uninsured[uninsured_features].drop("Uninsured Percent", axis = 1)
X_train_15.dropna(axis = "columns",inplace = True)
reg = LinearRegression()
reg.fit(X_train_15, Y_train_15)
#Code to determine feature weights comes courtesy of the SK-Learn documentation
# https://inria.github.io/scikit-learn-mooc/python_scripts/dev_features_importance.html
coefs15_u = pd.DataFrame(
   reg.coef_,
   columns=['Coefficients'], index=X_train_15.columns
)
Y_train_21 = health21_percent_uninsured[uninsured_features]["Uninsured Percent"].copy()
X_train_21 = health21_percent_uninsured[uninsured_features].drop("Uninsured Percent", axis = 1)
X_train_21.dropna(axis = "columns",inplace = True)
reg = LinearRegression()
reg.fit(X_train_21, Y_train_21)
coefs21_u = pd.DataFrame(
   reg.coef_,
   columns=['Coefficients'], index=X_train_21.columns
)
coefs15_u.plot.barh(ax=ax1,color={"Coefficients": "plum"},figsize=(18,10))
ax1.axvline(x=0, color='.5')
ax1.set_title("2015",fontsize=15)

coefs21_u.plot.barh(ax=ax2,color={"Coefficients": "yellowgreen"}, figsize=(18,10))
ax2.axvline(x=0, color='.5')
ax2.set_title("2021",fontsize=15)
plt.tight_layout()

These graphs show us a lot of interesting points of our data in terms of which features effect the insurance rates in what way. In 2015, we notice that being in a non-family or couple household is a large predictor for a low rate of uninsurance, or a high rate of insurance.

From these graphs, we can determine the most important features for predicting uninsured % in the two years. We will explore the feature importances of insured % more in our next graph below.

Feature Weights Insured %

In [54]:
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(16,28),sharey=False)
fig.suptitle('Feature Weights Insured %', fontsize=20, y=1.02)

Y_train_15 = health15_percent_insured[insured_features]["Insured Percent"].copy()
X_train_15 = health15_percent_insured[insured_features].drop("Insured Percent", axis = 1)
X_train_15.dropna(axis = "columns",inplace = True)
reg = LinearRegression()
reg.fit(X_train_15, Y_train_15)

coefs15_i = pd.DataFrame(
   reg.coef_,
   columns=['Coefficients'], index=X_train_15.columns
)
Y_train_21 = health21_percent_insured[insured_features]["Insured Percent"].copy()
X_train_21 = health21_percent_insured[insured_features].drop("Insured Percent", axis = 1)
X_train_21.dropna(axis = "columns",inplace = True)
reg = LinearRegression()
reg.fit(X_train_21, Y_train_21)
coefs21_i = pd.DataFrame(
   reg.coef_,
   columns=['Coefficients'], index=X_train_21.columns
)

coefs15_i.plot.barh(ax=ax1,color={"Coefficients": "plum"},figsize=(18, 10))
ax1.axvline(x=0, color='.5')
ax1.set_title("2015",fontsize=15)

coefs21_i.plot.barh(ax=ax2, color={"Coefficients": "yellowgreen"},figsize=(18, 10))
ax2.axvline(x=0, color='.5')
ax2.set_title("2021",fontsize=15)
plt.tight_layout()

Here we see the feature weights for predicting insurance. On the left we have the feature importance for predicting insurance in 2015, and on the right we have the same except they're the weights for 2021. It is important to notice that the feature importance graphs for insured % look different than the graphs for feature importance for uninsured %.

Feature Weights Insured 2021

In [55]:
#coefs21_i.set_index("Label")
coefs21_i
# copy the data
coefs21_min_max_scaled = coefs21_i.copy()
coefs21_min_max_scaled["Coefficients"] = (coefs21_min_max_scaled["Coefficients"] - coefs21_min_max_scaled["Coefficients"].min()) / (coefs21_min_max_scaled["Coefficients"].max() - coefs21_min_max_scaled["Coefficients"].min())	
coefs21_min_max_scaled.plot.pie(subplots=True,figsize=(12,12),legend=False)
Out[55]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f07e8f47850>],
      dtype=object)

The pie chart above was created for another visualization of the coefficients with the largest feature weights with Insurance rates in 2021. First, the coefficients were normalized using min-max scaling. The graph provides a holistic view that all the variables have an importance, yet some are much smaller or larger than others. For example, features such as No disability, Male, College or associate's degree, or being below 400% of the poverty threshold seem important in determining whether a person is insured in 2021. On the other hand, features such as disability have very little correlation with being insured.

This might bring up a question.. does having a disability in Louisiana mean you are less likely to be insured??

In [56]:
coefs15_u.reset_index(inplace=True)
coefs15_uninsured=coefs15_u.copy()
coefs15_u["Coefficients"]=coefs15_u["Coefficients"].abs()
(coefs15_u["Coefficients"]>0.065).value_counts()
new_coefs15_u=coefs15_u[coefs15_u["Coefficients"]>0.065]
new_coefs15_u.dropna(inplace=True)
new_coefs15_u.sort_values(by="Coefficients",ascending=True,inplace=True)
x1=new_coefs15_u["Label"]
y1=new_coefs15_u["Coefficients"]
/usr/local/lib/python3.8/dist-packages/pandas/util/_decorators.py:311: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  return func(*args, **kwargs)
In [57]:
coefs21_u.reset_index(inplace=True)
coefs21_uninsured=coefs21_u.copy()
coefs21_u["Coefficients"]=coefs21_u["Coefficients"].abs()
(coefs21_u["Coefficients"]>0.048).value_counts()
new_coefs21_u=coefs21_u[coefs21_u["Coefficients"]>0.048]
new_coefs21_u.dropna(inplace=True)
new_coefs21_u.sort_values(by="Coefficients",ascending=True,inplace=True)
x2=new_coefs21_u["Label"]
y2=new_coefs21_u["Coefficients"]
In [58]:
coefs15_uninsured.drop(index=0,inplace=True)
coefs15_uninsured.drop(index=31,inplace=True)
coefs15_uninsured.dropna()
coefs15_uninsured.reset_index(inplace=True)
In [59]:
coefs15_i.reset_index(inplace=True)
coefs15_insured=coefs15_i.copy()
coefs15_i["Coefficients"]=coefs15_i["Coefficients"].abs()
(coefs15_i["Coefficients"]>0.05).value_counts()
new_coefs15_i=coefs15_i[coefs15_i["Coefficients"]>0.05]
new_coefs15_i.dropna(inplace=True)
new_coefs15_i.sort_values(by="Coefficients",ascending=True,inplace=True)
x3=new_coefs15_i["Label"]
y3=new_coefs15_i["Coefficients"]
In [60]:
coefs21_i.reset_index(inplace=True)
coefs21_insured=coefs21_i.copy()
coefs21_i["Coefficients"]=coefs21_i["Coefficients"].abs()
(coefs21_i["Coefficients"]>0.0503).value_counts()
new_coefs21_i=coefs21_i[coefs21_i["Coefficients"]>0.0503]
new_coefs21_i.dropna(inplace=True)
new_coefs21_i.sort_values(by="Coefficients",ascending=True,inplace=True)
x4=new_coefs21_i["Label"]
y4=new_coefs21_i["Coefficients"]
In [61]:
coefs15_insured.drop(index=0,inplace=True)
coefs15_insured.drop(index=31,inplace=True)
coefs15_insured.dropna()
coefs15_insured.reset_index(inplace=True)
In [62]:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2,figsize=(15,12))
fig.suptitle('Feature Importance by Year and Insured/Uninsured', fontsize=20, y=1.02)

ax1.barh(x1, y1,color={'plum'})
ax1.set_title("2015 Uninsured % Most Important Features")
ax1.set_xlabel("Absolute Value of Feature Weights")

ax2.barh(x2, y2,color={'indigo'})
ax2.set_title("2021 Uninsured % Most Important Features")
ax2.set_xlabel("Absolute Value of Feature Weights")
plt.tight_layout()

ax3.barh(x3, y3,color={'yellowgreen'})
ax3.set_title("2015 Insured % Most Important Features")
ax3.set_xlabel("Absolute Value of Feature Weights")

ax4.barh(x4, y4,color={'darkolivegreen'})
ax4.set_title("2021 Insured % Most Important Features")
ax4.set_xlabel("Absolute Value of Feature Weights")
plt.tight_layout()

As you can see above, the factors differ in which has the highest feature weights depending on year and insured/uninsured %. Our next goal is to take these 5 most important features and use them to predict the 2021 data on the 2015 data. We will explore this in the last section of our analysis.

In [63]:
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(14,14),sharey=False)
fig.suptitle('Deltas', fontsize=20, y=1.02)

coefs_joined_u=coefs15_uninsured.join(other=coefs21_uninsured,how="inner",lsuffix="_2015",rsuffix="_2021")
coefs_joined_u["delta"]=coefs_joined_u["Coefficients_2021"]-coefs_joined_u["Coefficients_2015"]
coefs_joined_u.rename(columns={"Label_2015":"Features"},inplace=True)
coefs_joined_u.set_index("Features",inplace=True)
coefs_joined_u.drop(columns={"Label_2021","Coefficients_2021","Coefficients_2015","index"},inplace=True)

coefs_joined_i=coefs15_insured.join(other=coefs21_insured,how="inner",lsuffix="_2015",rsuffix="_2021")
coefs_joined_i.drop(index=30,inplace=True)
coefs_joined_i["delta"]=coefs_joined_i["Coefficients_2021"]-coefs_joined_i["Coefficients_2015"]
coefs_joined_i.rename(columns={"Label_2015":"Features"},inplace=True)
coefs_joined_i.set_index("Features",inplace=True)
coefs_joined_i.drop(columns={"Label_2021","Coefficients_2021","Coefficients_2015","index"},inplace=True)

coefs_joined_u.plot.barh(ax=ax1,color={"delta": "plum"},figsize=(15, 10))
ax1.axvline(x=0, color='.5')
ax1.set_title("Uninsured",fontsize=15)
ax1.set_xlabel("Delta of Beta Value")

coefs_joined_i.plot.barh(ax=ax2,color={"delta": "yellowgreen"},figsize=(15, 10))
ax2.axvline(x=0, color='.5')
ax2.set_title("Insured",fontsize=15)
ax2.set_xlabel("Delta of Beta Value")
plt.tight_layout()

Here we have the difference in feature weights between 2021 and 2015 for both insured % and uninsured %. One of the most important points on this graph is the delta for "<138 % of poverty threshold" on the uninsured deltas graph.

As is clear, the value for this delta is very negative which means that from 2015 to 2021 being below 138% of the povery threshold became negatively associated with being uninsured.

In plain english, this means that you are LESS likely to be uninsured in 2021 than you were in 2015 if you are below 138% of the poverty threshold. This is important to realize because one of the main tennants of Medicaid expansion is that if you were below 138% of the poverty threshold, you became eligable for Medicaid. This graph is highlighting one of the main effects of Medicaid expansion.

Did Medicaid change the course of Insurance rates in Louisiana?

To answer this key question we can use a linear regression.

Here is how the process will work:

  1. We will fit our model to the 2015 insured dataset, using the most important features that were determined in the Feature importance graph above
  2. We will then predict the 2021 insurance rates, using the same features that we used to fid our model
  3. Then, we will compare the predicted 2021 insurance rate value with the actual 2021 insurance rate value

We chose 5 factors to explore this linear regression. We chose these for specific reasons described below, but overall we were looking for factors that would impact a person's ability or choice to be insured by Medicaid expansion.

Male - came up in 3 of the feature weights as one of the most important factors.

<138% of poverty threshold - This is the group that should be directly effected by Medicaid Expansion. They are now eligible for Medicaid so we expect to see an increase in their insurance rates.

No disability - Shown in 2 of the feature weights, emphasizes the importance of peole who don't suffer from any disabilities, which may include a majority of healthy adults living in Louisiana. These people have no incentive to be insured because of a specific disability, so they will be effected heavily by Medicaid expansion.

In married couple families - The so-called "normal" households, this also came up in one of our feature weight importance graphs.

Age: 35-44: This is an age group highly effected by Medicaid. They fit the criteria for expansion and din't qualify before. Also seen in a feature importance graph.

In [64]:
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(19,13),sharey=False)
X_train = health15_percent_insured[["Male","< 138% of poverty threshold","No disability","In married couple families","Age: 35-44"]]
Y_train = health15_percent_insured["Insured Percent"]
X_test = health21_percent_insured[["Male","< 138% of poverty threshold","No disability","In married couple families","Age: 35-44"]]
Y_test = health21_percent_insured["Insured Percent"]

regressor = LinearRegression()  
regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)
Pred_v_Actual = pd.DataFrame({'Actual': Y_test, 'Predicted': y_pred.flatten()})
Pred_v_Actual["delta"]=Pred_v_Actual["Actual"]-Pred_v_Actual["Predicted"]
Pred_v_Actual_nodelt=Pred_v_Actual.drop(columns={"delta"})
Pred_v_Actual_nodelt.plot.bar(ax=ax1,color={"Actual":"yellowgreen","Predicted":"indigo"})
ax1.set_title("Difference between Predicted and Actual Insurance Rates", fontsize = 10)
ax1.set_ylabel("% Insured Citizens", fontsize = 15)
ax1.set_xlabel("Parish", fontsize = 15)

Pred_v_Actual_=Pred_v_Actual.drop(columns={"Predicted","Actual"})
Pred_v_Actual_.plot.bar(ax=ax2,color="plum")
ax2.set_title("Difference between Predicted and Actual Insurance Rates", fontsize = 10)
ax2.set_ylabel("Delta of % Insured Citizens", fontsize = 15)
ax2.set_xlabel("Parish", fontsize = 15)
Out[64]:
Text(0.5, 0, 'Parish')

These two models show the differences between our prediction for insurance rates of 2021 with the linear regression model and the acutal insurance rates. The left graph shows that all Predicted values were equal to or lower than the Actual values. This shows that actual insurance rates were higher than they wouldn've been without Medicaid!! A great sign!!

The right graph shows an enlarged version of these differences by observing the delta (or difference) between the predicted and observed values. This graph shows us more clearly the differences between parishes, and some parishes such as Rapides and St. Landry were able to highly improve insurance rates thanks to Medicaid. Other parishes such as Ouachita and Jefferson had less of a change, even though we saw a net improvement across all parishes.

Conclusion

Our analysis has been a learning process with insurance and Medicaid expansion. Louisiana is an interesting test case to evaluate since the populations vary here between rural and suburban, and there are huge differences in beliefs such as vaccination, abortion, and more medically-related political controversies. Our analysis has shown that insurance correlates much less with some factors we had expected, yet much more with others. We discovered how large a role gender plays in insurance rates, yet how race plays a smaller role.

As is the case with any predictive model, ours is not perfect. A key assumption that we made about the rates of insurance and uninsurance is that they are in a linear relationship with the features we selected. Because of this assumption, we chose to use a linear regression for our predictions and we got some associations that look strange at first glance.

It is entirely possible that the associations between insurance rates and the features of the dataset are linear, but its more likely that there are non-linear relationships in these data. Furthermore, its entirely possible that there are non-linear relationships between the features themselves that affect rates of insurance.

That is not to say that our model is not capable of reflecting some part of the real world. However, it is important to keep in mind that just because we used "machine learning" doesn't mean that we have unlocked all the secrets of insurance rates in Louisiana. With more resources, it would be worth examining each parish in our dataset individually and seeing what we find. Additionally, it would be worthwhile to explore the use of non-linear models that might more "accurately" capture the relationships of the features.

In conclusion, we were able to examine some interesting aspects of many population features and their relationship to rates of insurance. This is by no means an exhaustive analysis, but it is a good first look at this interesting problem.

In [67]:
%%shell
jupyter nbconvert --to html /content/drive/MyDrive/Colab_Notebooks/Data_Science_Project.ipynb
[NbConvertApp] Converting notebook /content/drive/MyDrive/Colab_Notebooks/Data_Science_Project.ipynb to html
[NbConvertApp] Writing 1855087 bytes to /content/drive/MyDrive/Colab_Notebooks/Data_Science_Project.html
Out[67]: