案例分析:美国各州人口数据分析
作业知识补充
首先导入文件,并查看数据样本
合并pop与abbrevs两个DataFrame,分别依据state/region列和abbreviation列来合并。
为了保留所有信息,使用外合并。
查看存在缺失数据的列。
使用.isnull().any(),只有某一列存在一个缺失数据,就会显示True。
查看缺失数据
根据数据是否缺失情况显示数据,如果缺失为True,那么显示
找到有哪些state/region使得state的值为NaN,使用unique()查看非重复值
为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN!
记住这样清除缺失数据NaN的方法!
合并各州面积数据areas,使用左合并。
思考一下为什么使用外合并?
继续寻找存在缺失数据的列
我们会发现area(sq.mi)这一列有缺失数据,为了找出是哪一行,我们需要找出是哪个state没有数据
去除含有缺失数据的行
查看数据是否缺失
找出2010年的全民人口数据,df.query(查询语句)
对查询结果进行处理,以state列作为新的行索引:set_index
计算人口密度。注意是Series/Series,其结果还是一个Series。
排序,并找出人口密度最高的五个州sort_values()
找出人口密度最低的五个州
要点总结:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
abb=pd.read_csv('../data/state-abbrevs.csv')
areas=pd.read_csv('../data/state-areas.csv')
pop=pd.read_csv('../data/state-population.csv')
abb_pop=pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer')
abb_pop.head()
#删除重复的列
abb_pop.drop('abbreviation',axis=1,inplace=True)
abb_pop.head()
abb_pop.isnull().head() #如果df中存在空值,则空值对应的行列位置显示的是True
abb_pop.isnull().any(axis=0) #检查每一列中是否存在空值(True)
#运行结果发现只有state和population中存在空值
#查看的是population列中空值所对应的行信息------------
misspop=abb_pop['population'].isnull() #找出pop这一列中所有的空值,如果是空值则返回True
misspop
abb_pop.loc[misspop] #获取了pop空值所对应的行数据
#查看的是state这一列中空值存在情况------------------
missState=abb_pop['state'].isnull()#如果该列中某一个数组元素为空值则显示True
missState
#将上一步返回的布尔列表作为行索引
State=abb_pop.loc[missState]
State
state['state/region'].unique()
#unique()是Serise的一个函数,该函数可以对Serise中的数组元素进行去重
Output: array(['PR', 'USA'], dtype=object)
为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN!
abb_pop['state/region']=='PR'
#返回一组布尔值,True表示True所在位置的元素值为PR。
#获取的这组布尔值的意义在于想要将其作为行索引,
#目的是为了获取一个或者一组数组元素,将数组元素进行修改。
abb_pop.loc[abb_pop['state/region']=='PR','state']='PUERTO RICO'
abb_pop.loc[abb_pop['state/region']=='USA','state']='United State'
测试是否还存在空数据,使用isnull(),出现False表示没有空值
abb_pop['state'].isnull().any()
Output:False
abb_pop.head()
areas.head()
abb_pop_areas=pd.merge(abb_pop,areas,how='left')
abb_pop_areas
abb_pop_areas.isnull().any()
abb_pop_areas['area (sq. mi)'].isnull()
abb_pop_areas.loc[abb_pop_areas['area (sq. mi)'].isnull()]
#获取行索引
indexs=abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()].index
去除含有缺失数据的行
abb_pop_areas.drop(indexs,axis=0,inplace=True)
abb_pop_areas.head()
data_2010=abb_pop_areas.query("year==2010 & ages=='total'")
data_2010.head()
data_2010['state']
data_2010_index=data_2010.set_index(data_2010['state'])
data_2010_index.head()
data_2010_index['population']/data_2010_index['area (sq. mi)']
data_2010_index['midu']=data_2010_index['population']/data_2010_index['area (sq. mi)']
data_2010_index.head()
data_2010_index.sort_values(by='midu',axis=0,ascending=False).head()
找出人口密度最低的五个州
data_2010_index.sort_values(by='midu',axis=0,ascending=False).tail()