• Pandas进阶修炼120题|第二期


    ==============

    欢迎关注首发公众号:早起python

    ==============

    大家好,Pandas进阶修炼120题系列旨在用刷题的方式彻底玩转pandas中各种操作,本期为第二期,我们开始吧~

    21数据读取

    题目:读取本地EXCEL数据

    难度:⭐

    答案

    df = pd.read_excel('pandas120.xlsx')

    本期部分习题与该数据相关

    22数据查看

    题目:查看df数据前5行

    难度:⭐

    期望输出

    答案

    df.head()

    23数据计算

    题目:将salary列数据转换为最大值与最小值的平均值难度:⭐⭐⭐⭐

    期望输出

    答案

    import re
    for i in range(len(df)):
        str1 = df.ix[i,2]
        k = re.findall(r"d+.?d*",str1)
        salary = ((int(k[0]) + int(k[1]))/2)*1000
        df.ix[i,2] = salary

    24数据分组

    题目:将数据根据学历进行分组并计算平均薪资

    难度:⭐⭐⭐

    期望输出

    education salary            
    不限 19600.000000
    大专 10000.000000
    本科 19361.344538
    硕士 20642.857143

    答案

    df.groupby('education').mean()

    25时间转换

    题目:将createTime列时间转换为月-日

    难度:⭐⭐⭐

    期望输出

    答案

    for i in range(len(df)):
        df.ix[i,0] = df.ix[i,0].to_pydatetime().strftime("%m-%d")

    26数据查看

    题目:查看索引、数据类型和内存信息

    难度:⭐

    期望输出

    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 135 entries, 0 to 134
    Data columns (total 4 columns):
    createTime 135 non-null object
    education 135 non-null object
    salary 135 non-null int64
    categories 135 non-null category
    dtypes: category(1), int64(1), object(2)
    memory usage: 3.5+ KB

    答案

    df.info()

    27数据查看

    题目:查看数值型列的汇总统计

    难度:⭐

    答案

    df.describe()

    28数据整理

    题目:新增一列根据salary将数据分为三组

    难度:⭐⭐⭐⭐

    期望输出

    v2-e4334f3145c2992d19c33b7000f591f7_1440w.jpguploading.4e448015.gif转存失败重新上传取消

    答案

    bins = [0,5000, 20000, 50000]
    group_names = ['低', '中', '高']
    df['categories'] = pd.cut(df['salary'], bins, labels=group_names)

    29数据整理

    题目:按照salary列对数据降序排列

    难度:⭐⭐

    答案

    df.sort_values('salary', ascending=False)

    30数据提取

    题目:取出第33行数据

    难度:⭐⭐

    答案

    df.loc[33]

    31数据计算

    题目:计算salary列的中位数
    难度:⭐⭐

    答案

    np.median(df['salary'])

    32数据可视化

    题目:绘制薪资水平频率分布直方图

    难度:⭐⭐⭐

    期望输出

    答案

    df.salary.plot(kind='hist')

    33数据可视化

    题目:绘制薪资水平密度曲线
    难度:⭐⭐⭐
    期望输出

    答案

    df.salary.plot(kind='kde',xlim=(0,80000))

    34数据删除

    题目:删除最后一列categories

    难度:⭐

    答案

    del df['categories']

    35数据处理

    题目:将df的第一列与第二列合并为新的一列

    难度:⭐⭐

    答案

    df['test'] = df['education']+df['createTime']

    36数据处理

    题目:将education列与salary列合并为新的一列

    难度:⭐⭐⭐

    备注:salary为int类型,操作与35题有所不同

    答案

    df["test1"] = df["salary"].map(str) + df['education']

    37数据计算

    题目:计算salary最大值与最小值之差

    难度:⭐⭐⭐

    答案

    df[['salary']].apply(lambda x: x.max() - x.min())

    38数据处理

    题目:将第一行与最后一行拼接

    难度:⭐⭐

    答案

    pd.concat([df[:1], df[-2:-1]])

    39数据处理

    题目:将第8行数据添加至末尾

    难度:⭐⭐

    答案

    df.append(df.iloc[7])

    40数据查看

    题目:查看每列的数据类型

    难度:⭐

    期望结果

    createTime object
    education object
    salary int64
    test object
    test1 object
    dtype: object

    答案

    df.dtypes

    41数据处理

    题目:将createTime列设置为索引

    难度:⭐⭐

    答案

    df.set_index("createTime")

    42数据创建

    题目:生成一个和df长度相同的随机数dataframe

    难度:⭐⭐

    答案

    df1 = pd.DataFrame(pd.Series(np.random.randint(1, 10, 135)))

    43数据处理

    题目:将上一题生成的dataframe与df合并

    难度:⭐⭐

    答案

    df= pd.concat([df,df1],axis=1)

    44数据计算

    题目:生成新的一列new为salary列减去之前生成随机数列

    难度:⭐⭐

    答案

    df["new"] = df["salary"] - df[0]

    45缺失值处理

    题目:检查数据中是否含有任何缺失值

    难度:⭐⭐⭐

    答案

    df.isnull().values.any()

    46数据转换

    题目:将salary列类型转换为浮点数

    难度:⭐⭐⭐

    答案

    df['salary'].astype(np.float64)

    47数据计算

    题目:计算salary大于10000的次数

    难度:⭐⭐

    答案

    len(df[df['salary']>10000])

    48数据统计

    题目:查看每种学历出现的次数

    难度:⭐⭐⭐

    期望输出

    本科 119
    硕士 7
    不限 5
    大专 4
    Name: education, dtype: int64

    答案

    df.education.value_counts()

    49数据查看

    题目:查看education列共有几种学历

    难度:⭐⭐

    答案

    df['education'].nunique()

    50数据提取

    题目:提取salary与new列的和大于60000的最后3行难度:⭐⭐⭐⭐期望输出

    答案

    df1 = df[['salary','new']]
    rowsums = df1.apply(np.sum, axis=1)
    res = df.iloc[np.where(rowsums > 60000)[0][-3:], :]

    以上就是Pandas进阶修炼120题|第二期的全部内容,完整的源码将会在稍晚些时候整理发布,如果对于某些题有其他解法欢迎点击下方小程序留言,我们下一期见~

  • 相关阅读:
    动态代理,反射的用途及实现
    谈一谈web.xml中的context-param和init-param
    后端程序员需要了解的前端知识(持续更新中)
    angularJS要点记录,$location,$http等等
    HTTP1.0和HTTP2.0的区别,以及HTTP和HTTPS的区别
    浅谈Fork/Join框架
    ConcurrentHashMap 的工作原理及源码分析,如何统计所有的元素个数
    HTTP协议常见的状态码
    图解HTTP,状态码,TCP、UDP等网络协议相关总结(持续更新)
    jmeter(五)JDBC Request
  • 原文地址:https://www.cnblogs.com/liuzaoqi/p/12769584.html
Copyright © 2020-2023  润新知