数据分析06 /pandas高级操作相关案例:人口案例分析、2012美国大选献金项目数据分析

1. 人口分析案例

  • 需求:

    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. 排序,并找出人口密度最高的五个州
  • 代码实现:

    1.导入文件,查看原始数据

    import pandas as pd
    
    # 各州的全称和简称
    abb = pd.read_csv('./data/state-abbrevs.csv')
    abb.head()

    # 各州人口数据
    pop = pd.read_csv('./data/state-population.csv')
    pop.head()

    # 各州面积数据
    area = pd.read_csv('./data/state-areas.csv')
    area.head()

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

    abb_pop = pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer') # how指定称outer,可以保证数据的完整性
    abb_pop.head()

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

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

    4.查看存在缺失数据的列

    # 方式一:
    abb_pop.info()

    # 方式二:
    abb_pop.isnull().any(axis=0)

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

    # 找出全称(state)的空值
    abb_pop['state'].isnull() # 找出空值对应的行数据(行数据中就有符合条件的简称)
    abb_pop.loc[abb_pop['state'].isnull()] # 在空所对应的行数据中取出简称(找到了空对应的简称)
    abb_pop.loc[abb_pop['state'].isnull()]['state/region'] # 去重
    abb_pop.loc[abb_pop['state'].isnull()]['state/region'].unique() # nunique()统计去重之后结果的个数,n-> num
    abb_pop.loc[abb_pop['state'].isnull()]['state/region'].nunique()

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

    思路:将state列中的空值都取出来,然后将其分成两组(PR对应的空值,USA对应的空)

    # 根据PR去state中定位空值
    abb_pop['state/region'] == 'PR'
    # 将PR对应的行数据取出,从行数据中定位空值,定位到的空值就是PR对应的空,空值赋值PR的全程
    abb_pop.loc[abb_pop['state/region'] == 'PR'] # 将PR对应的state的空值的行索引获取
    indexs = abb_pop.loc[abb_pop['state/region'] == 'PR'].index
    indexs # 将indexs对应行中的state列的数据批量赋值成PR的全称
    abb_pop.loc[indexs,'state'] = 'Puerto Rico'
    # 将USA对应的全称的空值覆盖称United Status
    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 Status'

    7.合并各州面积数据areas

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

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

    abb_pop_area['area (sq. mi)'].isnull()   # 判断area(sq. mi)列中存在的空值有哪些true
    abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()] # 将area(sq. mi)的空值对应的行数据取出

    9.去除含有缺失数据的行

    drop_index = abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()].index  # 获取行索引
    abb_pop_area.drop(labels=drop_index,axis=0,inplace=True) # 根据行索引进行行数据的删除

    10.找出2010年的全民人口数据,基于df进行条件查询

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

    11.计算各州的人口密度

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

    12.排序,并找出人口密度最高的五个州,sort_values根据值排序

    abb_pop_area.sort_values(by='midu',ascending=False)
    
    # ascending表示是升序还是降序

  • 人口分析案例总结:

    1. 读取文件:pd.read_csv('文件路径')

    2. 查看每一列的详细信息:data.info()

    3. df的条件查询:data.query('ages == "total" & year == 2010')

    4. 对某一列数据进行排序:data.sort_values(by='midu',ascending=False)

2. 2012美国大选献金项目数据分析

  • 需求:

    1. 加载数据,查看数据的基本信息

    2. 指定数据截取,将如下字段的数据进行提取,其他数据舍弃

      cand_nm :候选人姓名

      contbr_nm : 捐赠人姓名

      contbr_st :捐赠人所在州

      contbr_employer : 捐赠人所在公司

      contbr_occupation : 捐赠人职业

      contb_receipt_amt :捐赠数额(美元)

      contb_receipt_dt : 捐款的日期

    3. 对新数据进行总览df.info(),查看是否存在缺失数据

    4. 用统计学指标快速描述数值型属性的概要。df.describe()

    5. 空值处理。可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE

    6. 异常值处理。将捐款金额<=0的数据删除

    7. 新建一列为各个候选人所在党派party

    8. 查看party这一列中有哪些不同的元素

    9. 统计party列中各个元素出现次数

    10. 查看各个党派收到的政治献金总数contb_receipt_amt

    11. 查看具体每天各个党派收到的政治献金总数contb_receipt_amt

    12. 将表中日期格式转换为'yyyy-mm-dd'

    13. 查看老兵(捐献者职业)DISABLED VETERAN主要支持谁

    14. 找出各个候选人的捐赠者中,捐赠金额最大的人的职业以及捐献额

  • 代码实现:

    1.加载数据,查看数据的基本信息

    df = pd.read_csv('./data/usa_election.txt')
    df.head()

    2.指定数据截取,将如下字段的数据进行提取,其他数据舍弃

    df = df[['cand_nm','contbr_nm','contbr_st','contbr_employer','contbr_occupation','contb_receipt_amt','contb_receipt_dt']]

    3.对新数据进行总览df.info(),查看是否存在缺失数据

    df.info()
    
    数据总览如下:
    """
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 536041 entries, 0 to 536040
    Data columns (total 7 columns):
    cand_nm 536041 non-null object
    contbr_nm 536041 non-null object
    contbr_st 536040 non-null object
    contbr_employer 525088 non-null object
    contbr_occupation 530520 non-null object
    contb_receipt_amt 536041 non-null float64
    contb_receipt_dt 536041 non-null object
    dtypes: float64(1), object(6)
    memory usage: 28.6+ MB
    """

    5.用统计学指标快速描述数值型属性的概要。df.describe()

    df.describe()

    5.空值处理。可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE

    # 使用NOT PROVIDE对空值进行填充
    df.fillna(value='NOT PROVIDE',inplace=True) # 重新查看列是否有空值
    df.info() 数据总览如下:
    """
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 536041 entries, 0 to 536040
    Data columns (total 7 columns):
    cand_nm 536041 non-null object
    contbr_nm 536041 non-null object
    contbr_st 536041 non-null object
    contbr_employer 536041 non-null object
    contbr_occupation 536041 non-null object
    contb_receipt_amt 536041 non-null float64
    contb_receipt_dt 536041 non-null object
    dtypes: float64(1), object(6)
    memory usage: 28.6+ MB
    """

    6.异常值处理。将捐款金额<=0的数据删除

    df = df.loc[~(df['contb_receipt_amt'] <= 0)]

    7.新建一列为各个候选人所在党派party

    # 不同候选人党派对应表
    parties = {
    'Bachmann, Michelle': 'Republican',
    'Romney, Mitt': 'Republican',
    'Obama, Barack': 'Democrat',
    "Roemer, Charles E. 'Buddy' III": 'Reform',
    'Pawlenty, Timothy': 'Republican',
    'Johnson, Gary Earl': 'Libertarian',
    'Paul, Ron': 'Republican',
    'Santorum, Rick': 'Republican',
    'Cain, Herman': 'Republican',
    'Gingrich, Newt': 'Republican',
    'McCotter, Thaddeus G': 'Republican',
    'Huntsman, Jon': 'Republican',
    'Perry, Rick': 'Republican'
    }
    # 先查看共有多少个不同的候选人
    df['cand_nm'].unique() # 查看候选人的个数
    df['cand_nm'].nunique() # 利用映射为每个候选人添加党派信息
    df['party'] = df['cand_nm'].map(parties)
    df.head()

    8.查看party这一列中有哪些不同的元素

    df['party'].unique()

    9.统计party列中各个元素出现次数

    df['party'].value_counts()  # value_counts()统计Series中不同元素出现的次数

    10.查看各个党派收到的政治献金总数contb_receipt_amt

    # 应用分组
    df.groupby(by='party')['contb_receipt_amt'].sum()

    11.查看具体每天各个党派收到的政治献金总数contb_receipt_amt

    df.groupby(by=['contb_receipt_dt','party'])['contb_receipt_amt'].sum()

    12.将表中日期格式转换为'yyyy-mm-dd'

    # 应用运算工具
    def transform_date(d):
    day,month,year = d.split('-')
    month = months[month]
    return '20'+year+'-'+str(month)+'-'+day df['contb_receipt_dt'] = df['contb_receipt_dt'].map(transform_date)
    df.head()

    13.查看老兵(捐献者职业)DISABLED VETERAN主要支持谁

    # 1.取出老兵这个职业对应的行数据
    old_bing_df = df.loc[df['contbr_occupation'] == 'DISABLED VETERAN'] # 2.根据竞选者分组
    old_bing_df.groupby(by='cand_nm')['contb_receipt_amt'].sum()

    14.找出各个候选人的捐赠者中,捐赠金额最大的人的职业以及捐献额

    df.groupby(by='cand_nm')['contb_receipt_amt'].max()
    
    # 此方法有不能满足要求,待更新
  • 2012美国大选献金项目数据分析案例总结:

    1. 用统计学指标快速描述数值型属性的概要:df.describe()
    2. 统计Series中不同元素出现的次数:Series_obj.value_counts()

数据分析06 /pandas高级操作相关案例:人口案例分析、2012美国大选献金项目数据分析的更多相关文章

  1. pandas高级操作

    pandas高级操作 import numpy as np import pandas as pd from pandas import DataFrame,Series 替换操作 替换操作可以同步作 ...

  2. pandas高级操作总结

    1.pandas中的列的分位数 # 查看列的分位数 import pandas as pd # set columns type my_df['col'] = my_df['col'].astype( ...

  3. 数据分析05 /pandas的高级操作

    数据分析05 /pandas的高级操作 目录 数据分析05 /pandas的高级操作 1. 替换操作 2. 映射操作 3. 运算工具 4. 映射索引 / 更改之前索引 5. 排序实现的随机抽样/打乱表 ...

  4. 数据分析之Pandas操作

    Pandas pandas需要导入 import pandas as pd from pandas import Series,DataFrame import numpy as np 1 Serie ...

  5. pandas神器操作excel表格大全(数据分析数据预处理)

    使用pandas库操作excel,csv表格操作大全 关注公众号"轻松学编程"了解更多,文末有公众号二维码,可以扫码关注哦. 前言 准备三份csv表格做演示: 成绩表.csv su ...

  6. 数据分析之Pandas

    一.Pandas介绍 1.介绍 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. ...

  7. 【Python自动化Excel】Python与pandas字符串操作

    Python之所以能够成为流行的数据分析语言,有一部分原因在于其简洁易用的字符串处理能力. Python的字符串对象封装了很多开箱即用的内置方法,处理单个字符串时十分方便:对于Excel.csv等表格 ...

  8. Python数据分析库pandas基本操作

    Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...

  9. DataGridView控件使用大全说明-各种常用操作与高级操作

    DataGridView控件 DataGridView是用于Windows Froms 2.0的新网格控件.它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特 ...

随机推荐

  1. 【转载】图解NumPy

    目录 1. 读写文件 2. 内建向量/矩阵 3. 切片操作 4. 聚合函数 4.1. 向量 4.2. 矩阵 5. 矩阵的转置和重构 6. 常用操作API 7. 应用实例 7.1. 生成向量.矩阵 7. ...

  2. vulstack红队评估(五)

    一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: Win7: heart 123.com    #本地管理员用户 sun\Administrator dc123.com    #域管用户,改 ...

  3. Day7-微信小程序实战-引入iconfont(充分利用iconfont图标库的资源)

    一.引入iconfont 首先在iconfont.com中注册登陆: 点击上方[图标管理]并进入我的项目 注意:如果没有项目的话,就点击右边的来创建项目 在官网中找到想要的图标之后,以SVG的形式下载 ...

  4. 菜渣开源一个基于 EMIT 的 AOP 库(.NET Core)

    目录 1,快速入门 1.1 继承 ActionAttribute 特性 1.2 标记代理类型 2,如何创建代理类型 2.1 通过API直接创建 2,创建代理类型 通过API 通过 Microsoft. ...

  5. const变量的修改

    int main(){ const char a[]="hello world"; char *aa=(char *)a; printf("\nthe a address ...

  6. Redis进阶之使用Lua脚本自定义Redis命令

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 1.在Redis ...

  7. 说说TCP的三次握手和四次挥手

    一.传输控制协议TCP简介 1.1 简介 TCP(Transmission Control Protocol) 传输控制协议,是一种 面向连接的.可靠的.基于字节流的传输层 通信协议. TCP是一种面 ...

  8. Python三大器之装饰器

    Python三大器之装饰器 开放封闭原则 一个良好的项目必定是遵守了开放封闭原则的,就比如一段好的Python代码必定是遵循PEP8规范一样.那么什么是开放封闭原则?具体表现在那些点? 开放封闭原则的 ...

  9. python黑帽子之tcp服务端

    试着用python创建一个标准的多线程tcp服务器 import socket import threading bind_ip = "0.0.0.0" bind_port = 8 ...

  10. 手把手教你把web应用丢到服务器上(单页应用+ 服务端渲染)

    前两篇文章中,我分别介绍了框架的搭建利用vue-cli + vant搭建一个移动端开发模板,并且把项目中axios请求和vuex的用法做了简要的介绍如何在项目里管理好axios请求与vuex.在这两篇 ...