zoukankan      html  css  js  c++  java
  • 数据可视化基础专题(十八):Pandas120题(三)21-50

    第二期 Pandas数据处理

    21.读取本地EXCEL数据

    import pandas as pd
    df = pd.read_excel('pandas120.xlsx')

    22.查看df数据前5行

    df.head()

    23.将salary列数据转换为最大值与最小值的平均值

    #备注,在某些版本pandas中.ix方法可能失效,可使用.iloc,参考https://mp.weixin.qq.com/s/5xJ-VLaHCV9qX2AMNOLRtw
    #为什么不能直接使用max,min函数,因为我们的数据中是20k-35k这种字符串,所以需要先用正则表达式提取数字
    import re
    # 方法一:apply + 自定义函数
    def func(df):
        lst = df['salary'].split('-')
        smin = int(lst[0].strip('k'))
        smax = int(lst[1].strip('k'))
        df['salary'] = int((smin + smax) / 2 * 1000)
        return df
    
    df = df.apply(func,axis=1)
    # 方法二:iterrows + 正则
    import re
    for index,row in df.iterrows():
        nums = re.findall('d+',row[2])
        df.iloc[index,2] = int(eval(f'({nums[0]} + {nums[1]}) / 2 * 1000'))

    24.将数据根据学历进行分组并计算平均薪资

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

    25.将createTime列时间转换为月-日

    #备注,在某些版本pandas中.ix方法可能失效,可使用.iloc,参考https://mp.weixin.qq.com/s/5xJ-VLaHCV9qX2AMNOLRtw
    for i in range(len(df)):
        df.ix[i,0] = df.ix[i,0].to_pydatetime().strftime("%m-%d")  
    df.head()

    26.查看索引、数据类型和内存信息

    df.info()

    27.查看数值型列的汇总统计

    df.describe()

    28.新增一列根据salary将数据分为三组

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

    29.按照salary列对数据降序排列

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

    30.取出第33行数据

    df.loc[32]

    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']
    # 等价于
    df.drop(columns=['categories'], inplace=True)

    35.将df的第一列与第二列合并为新的一列

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

    36.将education列与salary列合并为新的一列

    #备注:salary为int类型,操作与35题有所不同
    df["test1"] = df["salary"].map(str) + df['education']
    df

    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.查看每列的数据类型

    df.dtypes

    41.将createTime列设置为索引

    df.set_index("createTime")

    42.生成一个和df长度相同的随机数dataframe

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

    43.将上一题生成的dataframe与df合并

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

    44.生成新的一列new为salary列减去之前生成随机数列

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

    45.检查数据中是否含有任何缺失值

    df.isnull().values.any()

    46.将salary列类型转换为浮点数

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

    47.计算salary大于10000的次数

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

    48.查看每种学历出现的次数

    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:], :]
    res

  • 相关阅读:
    记录自己的缺点
    JavaScript算法系列之-----------------变态跳台阶(JS实现)
    JavaScript算法系列之-----------------跳台阶(JS实现)
    JavaScript算法系列之-----------------求1+2+..+n(JS实现)
    JavaScript算法系列之-----------------用两个栈实现队列(JS实现)
    react react-transition-group实现动画
    React 学习笔记
    javascript 面向对象-面试题实例
    javascript 面向对象
    python functools
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14728286.html
Copyright © 2011-2022 走看看