Home > database >  Removing zero values from pivot table somehow creates another problem
Removing zero values from pivot table somehow creates another problem

Time:05-28

I have an assignment from my Python class to mine a set of data consisting CO2 emissions from (almost) all the countries in the world from 1960 to 2011. One of the task i've been working on is to produce a line graph that represents the growth of CO2 production in a specific country, and i'd like to avoid inserting zeros into the graph. Here is the code i've been using.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sn
import numpy as np

# Creating DataFrame
Data = pd.read_excel('CO2 Sorted Data.xlsx')
df = pd.DataFrame(Data, columns=['Year','CountryName','Region','IncomeType','CO2Emission','CO2EmCMT'])
df.replace(0,np.nan,inplace=True)
print(df)

# Creating the Pivot Table
pvt = df.pivot_table(index=['Year'],columns=['CountryName'],values='CO2Emission',aggfunc='sum')

# Creating the Graph
pvt2 = pvt.reindex()
CO2Country = input('Input Country Name = ')
remove_zero=pvt2[CO2Country]
rz1=[i for i in remove_zero if i !=0]
plt.plot(rz1,c='red')
plt.title('CO2 Emission of '  CO2Country  ' (1960-2011)', fontsize=10)
plt.xlabel('Year',fontsize=10)
plt.ylabel('CO2 Emission (kiloton)')
plt.grid(True)
plt.show

If i input Aruba for example, output would look like this. A little bit of the data

CodePudding user response:

To get the output in proper year format, you must enumerate the data first.

So: data = list(enumerate(rz1, start=1960))

There are to ways to go about plotting this new data, one is by converting the data into a np Array and transposing, the other is by using the zip function. They both have the same output.

data = list(zip(*b))

or

data = np.array(data).transpose()

The final code(in the creating the graph section) is:

# Creating the Graph
pvt2 = pvt.reindex()
CO2Country = 'Aruba'

remove_zero=pvt2[CO2Country]
rz1=[i for i in remove_zero if i !=0]
data = list(enumerate(rz1, start=1960))
# data= np.array(data).transpose()

data= list(zip(*data))
plt.plot(data[0], data[1],c='red')

s/n: call plt.show(), not plt.show

CodePudding user response:

I don't know about the pivoting thing, but the following works fine:

co2.Year = pd.to_datetime(co2.Year)
aruba = df[df.CountryName = "Aruba"].set_index("Year")
aruba.CO2Emission.plot()
  • Related