- 需求:
- 1.将人口数据和各州简称数据进行整合且删除其中重复的abbreviation列
- 2.查看整合数据中是否存在缺失数据的列且计算出缺失数据的占比
- 3.将州的全程state中空值对应的简称找到,对找到的简称进行去重操作
- 4.为state项中的缺失值补上正确的值,从而去除掉state这一列的所有NaN
- 5.在现有数据的基础上将各州面积数据areas进行整合
- 6.我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
- 7.去除所有含有缺失数据的行数据
- 8.找出2010年的全民人口数据
import pandas as pd
import numpy as np
from pandas import DataFrame
#1.加载数据
abb = pd.read_csv(‘./state-abbrevs.csv’)
abb.head(2) #state州的全称,abbreviation州的简称
pop = pd.read_csv(‘./state-population.csv’)
pop.head(2) #state/region州的简称,ages年龄,year年份,population人口数量
area = pd.read_csv(‘./state-areas.csv’)
area.head(2) #state州的全称,area (sq. mi)州的面积
#可以将人口数据pop和州的数据abb进行汇总
abb_pop = pd.merge(left=abb,right=pop,left_on=‘abbreviation’,right_on=‘state/region’,how=‘outer’)
abb_pop.head()
#将合并的数据中重复的abbreviation列进行删除
abb_pop.drop(columns=‘abbreviation’,inplace=True)
#查看存在缺失数据的列,缺缺失值的占比
for col in abb_pop.columns:
if abb_pop[col].isnull().sum() > 0:
null_count = abb_pop[col].isnull().sum()
p = null_count / abb_pop[col].size
p = format(p,‘.2%’)
print(col,‘列存在空值的占比:’,p)
state 列存在空值的占比: 3.77%
population 列存在空值的占比: 0.79%
#将州的全程state中空值对应的简称找到,对找到的简称进行去重操作
#将state列中空值对应的行数据进行定位
ex = abb_pop[‘state’].isnull()
state_null_df = abb_pop.loc[ex]
state_null_df[‘state/region’].unique()
array([‘PR’, ‘USA’], dtype=object)
#对state列中的空值数据进行清洗操作:将其空值填充为PR和USA的全程即可
#可以将USA对应state中的空值进行定位,然后将其填充成USA的全称
ex = abb_pop[‘state/region’] == ‘USA’
USA_df = abb_pop.loc[ex] #取出的就是USA对应的行数据
indexs = USA_df.index #获取了USA对应行数据的行索引
#注意:一定要在原始数据abb_pop中进行空值的填充
abb_pop.loc[indexs,‘state’] = ‘United States’
#可以将PR对应state中的空值进行定位,然后将其填充成PR的全称
PR_df = abb_pop.loc[abb_pop[‘state/region’] == ‘PR’] #PR对应的行数据
indexs = PR_df.index
abb_pop.loc[indexs,‘state’] = ‘PPPRRR’
#合并各州面积数据areas
abb_pop_area = pd.merge(left=abb_pop,right=area,on=‘state’,how=‘outer’)
abb_pop_area.head()
#我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
#去除含有缺失数据的行
ex = abb_pop_area[‘area (sq. mi)’].isnull()
area_null_df = abb_pop_area.loc[ex] #取出了area (sq. mi)列中空对应的行数据
drop_indexs = area_null_df.index
drop_indexs
abb_pop_area.drop(index=drop_indexs,inplace=True)
abb_pop_area.dropna(inplace=True)
#找出2010年的全民人口数据(条件查询)
abb_pop_area.query(‘year2010 & ages"total"’)
补充
- 匿名函数:没有名字的函数,可以使用lambda表达式进行实现
def func(x): #函数定义
if x > 0:
return 1
else:
return 0
func(-10) #函数调用
0
#匿名函数
lambda x:1 if x > 0 else 0
#冒号左侧的x表示匿名函数的参数
#解释:如果参数x的值>0则匿名函数返回1,否则返回0
<function main.(x)>
- df.apply()操作:
- apply可以充当运算工具,该运算工具可以直接作用到df表格中
df = DataFrame(data=np.random.randint(0,100,size=(5,6)))
df
#有名函数的普通形式
def func(x):#参数x就表示df的某一行数据
if x.mean() > x.std():
return 1
else:
return 0
df.apply(func,axis=1) #可以使用apply这个运算工具基于func函数处理df中的每一行数据
#匿名函数的形式
df.apply(lambda x:1 if x.mean() > x.std() else 0,axis=1)
内容来自大数据分析课程。