• 7、Python 数据分析-Pandas人口分析案例


    需求

    • 1.导入文件,查看原始数据
    • 2.将人口数据和各州简称数据进行合并
    • 3.将合并的数据中重复的abbreviation列进行删除
    • 4.查看存在缺失数据的列
    • 5.找到有哪些state/region使得state的值为NaN,进行去重操作
    • 6.为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN
    • 7合并各州面积数据areas
    • 8.我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
    • 9.去除含有缺失数据的行
    • 10.找出2010年的全民人口数据
    • 11.计算各州的人口密度
    • 12.排序,并找出人口密度最高的州

    导入文件,查看原始数据

    abb = pd.read_csv('./state-abbrevs.csv') 
    #state(州的全称)abbreviation(州的简称)
    

    area = pd.read_csv('./state-areas.csv') 
    #state州的全称,area (sq. mi)州的面积
    

    pop = pd.read_csv('./state-population.csv')
    #state/region州/地区简称,ages年龄,year时间,population人口数量
    

    将人口数据和各州简称数据进行合并

    abb_pop = pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer')
    

    将合并的数据中重复的abbreviation列进行删除

    abb_pop.drop(labels='abbreviation',axis=1,inplace=True)
    

    查看存在缺失数据的列
    方式1:

    abb_pop.info()
    >>>
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 2544 entries, 0 to 2543
    Data columns (total 5 columns):
     #   Column        Non-Null Count  Dtype  
    ---  ------        --------------  -----  
     0   state         2448 non-null   object 
     1   state/region  2544 non-null   object 
     2   ages          2544 non-null   object 
     3   year          2544 non-null   int64  
     4   population    2524 non-null   float64
    dtypes: float64(1), int64(1), object(3)
    memory usage: 119.2+ KB
    

    方式2:

    abb_pop.isnull().any(axis=0)
    >>>
    state            True
    state/region    False
    ages            False
    year            False
    population       True
    dtype: bool
    

    找到有哪些state/region使得state的值为NaN,进行去重操作

    #1.找到state中的空值
    abb_pop['state'].isnull()
    #2.将空值对应的行数据提取
    abb_pop.loc[abb_pop['state'].isnull()]
    #3.将state空对应的简称找出
    abb_pop.loc[abb_pop['state'].isnull()]['state/region']
    #4.对符合要求的简称进行去重
    abb_pop.loc[abb_pop['state'].isnull()]['state/region'].unique()
    >>>
    array(['PR', 'USA'], dtype=object)
    
    
    #nunique可以统计重复元素的个数
    abb_pop.loc[abb_pop['state'].isnull()]['state/region'].nunique()
    >
    2
    

    为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN

    #1.state这一列中的空值对应的简称为PR和USA,
    #state这一列的空值分为两种类型,一种类型需要补充PR的全称,一种类型需要补充为USA的全称
    #2.找到PR简称对应全称的空值
        #可以将PR对应的行数据取出,然后将state列取出即可
    abb_pop['state/region'] == 'PR'
        #取出对应的行数据
    abb_pop.loc[abb_pop['state/region'] == 'PR']
    #3.将符合要求的空进行正确填充
    indexs = abb_pop.loc[abb_pop['state/region'] == 'PR'].index
    #批量赋值
    abb_pop.loc[indexs,'state'] = 'PPPRRR'
    

    abb_pop['state/region'] == 'USA'
    abb_pop.loc[abb_pop['state/region'] == 'USA']
    indexs = abb_pop.loc[abb_pop['state/region'] == 'USA'].index
    abb_pop.loc[indexs,'state'] = 'United States'
    

    合并各州面积数据areas

    abb_pop_area = pd.merge(abb_pop,area,how='outer')
    

    我们会发现area(sq.mi)这一列有缺失数据,找出是这些行

    abb_pop_area['area (sq. mi)'].isnull()
    abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()]
    drop_index = abb_pop_area.loc[abb_pop_area['area (sq.mi)'].isnull()].index
    >>>
    Int64Index([2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458,
                2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469,
                2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480,
                2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491,
                2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502,
                2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513,
                2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524,
                2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535,
                2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543],
               dtype='int64')
    

    去除含有缺失数据的行

    #删除缺失数据的行
    abb_pop_area.drop(labels=drop_index,axis=0,inplace=True)
    #删除最后一行数据
    abb_pop_area.drop(labels=2544,axis=0,inplace=True)
    #查看状态信息是否都已清洗完成
    abb_pop_area.isnull().any(axis=0)
    >>>
    state            False
    state/region     False
    ages             False
    year             False
    population       False
    area (sq. mi)    False
    dtype: bool
    

    找出2010年的全民人口数据

    query条件查询

    abb_pop_area.query('year == 2010 & ages == "total"')
    

    image-20200629211836505

    计算各州的人口密度

    abb_pop_area['midu'] = abb_pop_area['population'] / abb_pop_area['area (sq. mi)']
    

    排序,并找出人口密度最高的州

    sort_values:值排序

    sort_index:索引排序

    abb_pop_area.sort_values(by='midu',axis=0,ascending=False)
    

  • 相关阅读:
    回忆Partition算法及利用Partition进行快排
    2019春第七周作业
    2019春第六周作业
    2019春第五周作业
    2019年春季学期第四周作业。
    2019年春季学期第三周作业
    2019年春季学期第二周作业
    2019春第一周作业编程总结
    PTA编程总结2—币值转换
    第七周编程总结
  • 原文地址:https://www.cnblogs.com/remixnameless/p/13210537.html
Copyright © 2020-2023  润新知