• pandas_数据拆分与合并


    import pandas as pd
    import numpy as np
    
    # 读取全部数据,使用默认索引
    data = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx')
    
    # 修改异常值
    data.loc[data.交易额 > 3000,'交易额'] = 3000
    data.loc[data.交易额 < 200,'交易额'] = 200
    
    # 删除重复值
    data.drop_duplicates(inplace = True)
    #   inplace 表示对源数据也进行修改
    # 填充缺失值
    data['交易额'].fillna(data['交易额'].mean(),inplace = True)
    
    # 使用交叉表得到每人在各柜台交易额的平均值
    data_group = pd.crosstab(data.姓名,data.柜台,data.交易额,aggfunc = 'mean').apply(round)
    # 绘制柱状图
    data_group.plot(kind = 'bar')
    # <matplotlib.axes._subplots.AxesSubplot object at 0x000001D681607888>
    
    
    #  数据的合并
    data1 = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx')
    data2 = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx',sheet_name = 'Sheet2')
    df1 = data1[:3]
    '''
         工号  姓名        日期           时段   交易额   柜台
    0  1001  张三  20190301   9:00-14:00  2000  化妆品
    1  1002  李四  20190301  14:00-21:00  1800  化妆品
    2  1003  王五  20190301   9:00-14:00   800   食品
    '''
    df2 = data2[:4]
    '''
         工号  姓名        日期           时段   交易额    柜台
    0  1006  钱八  20190301   9:00-14:00   850  蔬菜水果
    1  1001  张三  20190302  14:00-21:00   600  蔬菜水果
    2  1001  张三  20190302   9:00-14:00  1300   化妆品
    3  1002  李四  20190302  14:00-21:00  1500   化妆品
    '''
    # 使用 concat 连接两个相同结构的 DataFrame 对象
    df3 = pd.concat([df1,df2])
    '''
         工号  姓名        日期           时段   交易额    柜台
    0  1001  张三  20190301   9:00-14:00  2000   化妆品
    1  1002  李四  20190301  14:00-21:00  1800   化妆品
    2  1003  王五  20190301   9:00-14:00   800    食品
    0  1006  钱八  20190301   9:00-14:00   850  蔬菜水果
    1  1001  张三  20190302  14:00-21:00   600  蔬菜水果
    2  1001  张三  20190302   9:00-14:00  1300   化妆品
    3  1002  李四  20190302  14:00-21:00  1500   化妆品
    '''
    # 合并,忽略原来的索引 ignore_index
    df4 = df3.append([df1,df2],ignore_index = True)
    '''
          工号  姓名        日期           时段   交易额    柜台
    0   1001  张三  20190301   9:00-14:00  2000   化妆品
    1   1002  李四  20190301  14:00-21:00  1800   化妆品
    2   1003  王五  20190301   9:00-14:00   800    食品
    3   1006  钱八  20190301   9:00-14:00   850  蔬菜水果
    4   1001  张三  20190302  14:00-21:00   600  蔬菜水果
    5   1001  张三  20190302   9:00-14:00  1300   化妆品
    6   1002  李四  20190302  14:00-21:00  1500   化妆品
    7   1001  张三  20190301   9:00-14:00  2000   化妆品
    8   1002  李四  20190301  14:00-21:00  1800   化妆品
    9   1003  王五  20190301   9:00-14:00   800    食品
    10  1006  钱八  20190301   9:00-14:00   850  蔬菜水果
    11  1001  张三  20190302  14:00-21:00   600  蔬菜水果
    12  1001  张三  20190302   9:00-14:00  1300   化妆品
    13  1002  李四  20190302  14:00-21:00  1500   化妆品
    '''
    # 按照列进行拆分
    df5 = df4.loc[:,['姓名','柜台','交易额']]
    # 查看前五条数据
    df5[:5]
    '''
       姓名    柜台   交易额
    0  张三   化妆品  2000
    1  李四   化妆品  1800
    2  王五    食品   800
    3  钱八  蔬菜水果   850
    4  张三  蔬菜水果   600
    '''
    
    # 合并 merge 、 join
    # 按照工号进行合并,随机查看 3 条数据
    rows = np.random.randint(0,len(df5),3)
    pd.merge(df4,df5).iloc[rows,:]
    '''
          工号  姓名        日期           时段   交易额   柜台
    7   1002  李四  20190301  14:00-21:00  1800  化妆品
    4   1002  李四  20190301  14:00-21:00  1800  化妆品
    10  1003  王五  20190301   9:00-14:00   800   食品
    '''
    # 按照工号进行合并,指定其他同名列的后缀
    pd.merge(df1,df2,on = '工号',suffixes = ['_x','_y']).iloc[:,:]
    '''
         工号 姓名_x      日期_x         时段_x  ...      日期_y         时段_y 交易额_y  柜台_y
    0  1001   张三  20190301   9:00-14:00  ...  20190302  14:00-21:00   600  蔬菜水果
    1  1001   张三  20190301   9:00-14:00  ...  20190302   9:00-14:00  1300   化妆品
    2  1002   李四  20190301  14:00-21:00  ...  20190302  14:00-21:00  1500   化妆品
    '''
    # 两个表都设置工号为索引 set_index
    df2.set_index('工号').join(df3.set_index('工号'),lsuffix = '_x',rsuffix = '_y').iloc[:]
    '''
         姓名_x      日期_x         时段_x  交易额_x  ...      日期_y         时段_y  交易额_y  柜台_y
    工号                                      ...                                    
    1001   张三  20190302  14:00-21:00    600  ...  20190301   9:00-14:00   2000   化妆品
    1001   张三  20190302  14:00-21:00    600  ...  20190302  14:00-21:00    600  蔬菜水果
    1001   张三  20190302  14:00-21:00    600  ...  20190302   9:00-14:00   1300   化妆品
    1001   张三  20190302   9:00-14:00   1300  ...  20190301   9:00-14:00   2000   化妆品
    1001   张三  20190302   9:00-14:00   1300  ...  20190302  14:00-21:00    600  蔬菜水果
    1001   张三  20190302   9:00-14:00   1300  ...  20190302   9:00-14:00   1300   化妆品
    1002   李四  20190302  14:00-21:00   1500  ...  20190301  14:00-21:00   1800   化妆品
    1002   李四  20190302  14:00-21:00   1500  ...  20190302  14:00-21:00   1500   化妆品
    1006   钱八  20190301   9:00-14:00    850  ...  20190301   9:00-14:00    850  蔬菜水果
    
    '''

    2020-05-07

  • 相关阅读:
    AES-GCM算法
    Linux Curl命令
    OpenLDAP
    网络性能测试
    LoadRunner
    XSLT
    dtruss
    删除重复图片
    2018年部门管理的一点总结
    矢量地图方案的进一步探讨
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12844857.html
Copyright © 2020-2023  润新知