• 数据分析 | Pandas 200道练习题 进阶篇(3)


    在这里插入图片描述

    DA21 大佬用户成就值比例

    刷题网址牛客网

    在这里插入图片描述
    题意分析
    解题还是需要分为三步,一找出7级大佬,二计算出所有人的成就值和,三计算每个7级大佬的成就值占所有值的比例。
    题解

    import pandas as pd
    df = pd.read_csv('Nowcoder.csv')
    big_df = df[df['Level'] == 7]
    s = df['Achievement_value'].sum()
    print(big_df['Achievement_value']/s)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    DA22 牛客网用户最高的正确率

    在这里插入图片描述
    题意分析
    从题目中我们能够发现需要先找出刷题数量大于10道的人,,然后分别计算每一个人的正确率,最后需要找出最高的正确率(保留3位小数)
    题解

    import pandas as pd
    df = pd.read_csv('Nowcoder.csv')
    new_df = df[df['Num_of_exercise']>10]
    z=new_df['Num_of_exercise']/new_df['Number_of_submissions']
    print(z.max().round(3))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    DA23 统计牛客网用户的名字长度

    在这里插入图片描述
    题意分析
    题目就是想让计算字符串的长度
    题解

    import pandas as pd
    df = pd.read_csv('Nowcoder.csv')
    print(df['Name'].apply(len))
    
    • 1
    • 2
    • 3

    相关函数

    • apply 传入的参数是一个函数,数据对象会依次调用这个函数

    24-27为数据清洗的部分

    DA24 去掉信息不全的用户

    使用的数据仍然是Nowcoder.csv
    在这里插入图片描述
    题意分析
    题目让我做的就是删除出现空值的行
    题解1

    import pandas as pd
    df = pd.read_csv('Nowcoder.csv',dtype=object)
    # 意因为牛客这个在线测试还不够完善,如果不设置显示宽度和行数就会报错,是一个待优化的地方。
    pd.set_option('display.width', 300)  # 设置字符显示宽度
    pd.set_option('display.max_rows', None)  # 设置显示最大行
    pd.set_option('display.max_columns', None)
    # dropna(axis=0) 删除存在空值的行
    print(df.dropna(axis=0))  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    题解2
    使用isnull().any(axis=1)找出含有空值的行,取数据的时候筛除

    import pandas as pd
    df = pd.read_csv('Nowcoder.csv',dtype=object)
    pd.set_option('display.width', 300)  # 设置字符显示宽度
    pd.set_option('display.max_rows', None)  # 设置显示最大行
    pd.set_option('display.max_columns', None)
    # axis=1 等于代表对行中的数据进行判断
    d = df.isnull().any(axis=1)  
    print(df.loc[-d])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意 any(axis=1)dropna(axis=0)中作用的都是行,我们平时也不能按照axis=1就是列,axis=0就代表行来理解,关于这个怎样理解pandas 中axis=1和axis=0回来会详细出一篇博客进行讲解。

    DA25 修补缺失的用户数据

    使用的数据仍然是Nowcoder.csv
    在这里插入图片描述
    题意分析
    题目就是让根据条件填充空值
    处理空值是我们在实际生活中经常要做的工作,关于这个处理空值的方式也有很多。
    题解1
    通过字典指定指定不同的列执行

    import pandas as pd
    df = pd.read_csv('Nowcoder.csv')
    pd.set_option('display.width', 300)  # 设置字符显示宽度
    pd.set_option('display.max_rows', None)  # 设置显示最大行
    pd.set_option('display.max_columns', None)
    g = df['Graduate_year'].max()
    a = df['Achievement_value'].mean().round(0)
    dic = {"Graduate_year":g,
            'Language':'Python',
            'Achievement_value': a 
    }
    print(df.fillna(value=dic))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    题解2

    import pandas as pd
     
    df = pd.read_csv("Nowcoder.csv", sep=",")
    pd.set_option("display.width", 300)  # 设置字符显示宽度
    pd.set_option("display.max_rows", None)  # 设置显示最大行
    pd.set_option("display.max_columns", None)
    a = df["Graduate_year"].max()
    df['Graduate_year'].fillna(value=a)
    df['Language'].fillna('Python')
    df['Achievement_value'].fillna(df['Achievement_value'].mean().round(0))
    print(df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意这里使用的round不是python的函数是pandas中的round函数,python中的round函数并不是四舍五入,pandas中的round函数是四舍五入。

    相关函数

    • fillna 的使用方法,这个设计的方式太多了,明天出一篇fillna的详解,总结几乎全部的使用方式

    DA26 解决牛客网用户重复的数据

    使用的数据仍然是Nowcoder.csv
    在这里插入图片描述
    题意分析
    找出所有的重复行
    将重复的行留一行,其余的删除

    题解
    关于这个重复的行我们使用pandas中自带的函数进行处理,其实我们也可以使用python中的方法进行解题,但是这样就绕远路了

    import pandas as pd
    df = pd.read_csv('Nowcoder.csv')
    print(df.duplicated())
    print(df.drop_duplicates())
    
    • 1
    • 2
    • 3
    • 4

    相关的函数

    • duplicated(subset=[],keep='first',) 判断每一行是否是重复的行,如果是重复的行返回true,否则返回false
      • subset:表示要进去重的列名,默认为 None。
      • keep:有三个可选参数,分别是 first、last、False,默认为 first,表示只有第一次出现的重复项返回 False,其余返回True,last 表示将最后一次出现的行返回False,其余重复的行返回True,False 表示重复的行都返回True
    • df.drop_duplicates(subset=[],keep='first',inplace=True)
      • subset:表示要进去重的列名,默认为 None。
      • keep:有三个可选参数,分别是 first、last、False,默认为 first,表示只保留第一次出现的重复项,删除其余重复项,last 表示只保留最后一次出现的重复项,False 则表示删除所有重复项。
      • inplace:布尔值参数,同其他函数一样,默认Flase不修改原数据,设置为True修改原数据

    刷题网址牛客网

    总结:

    本章仍然讲解一些常用的函数,保留指定小数位round(3),删除空值dropna,填充空值fillna,判断重复的行duplicated(),删除重复的行drop_duplicates(), 后面几个函数常用于数据清洗,数据清洗是数据分析之前一个必要的工作,清洗的好坏也影响后面数据的分析、数据建模

    在这里插入图片描述

  • 相关阅读:
    数据结构复习题(二)
    【学习笔记】NOIP模拟赛
    java-php-python-ssm学术会议信息网站计算机毕业设计
    使用iCloud和Shortcuts实现跨设备同步与自动化数据采集
    网络安全笔记-MSF
    Linux开发工具之调试器gdb
    Linux内核设计与实现 第四章 进程调度
    跟着我一起通关java面试吧(30)
    面试20k的Python工程师,聊了这26个问题,个个都是经典
    DJ9-1 总线及接口
  • 原文地址:https://blog.csdn.net/qq_52007481/article/details/127929619