数据分析 pandas库常用操作 (下)

目录

1、批量拆分和合并Excel文件

2、pandas实现groupby分组统计


这里续(中)

1、批量拆分和合并Excel文件

拆分:

def pandas_handle_excel():
    work_dir = "./workMerge"
    splits_dir = f"{work_dir}/splits"

    #########################
    # 拆分
    import os
    if not os.path.exists(splits_dir):
        os.mkdir(splits_dir)

    df_source = pd.read_excel(f'{work_dir}/titanic.xlsx')
    print(df_source.head())
    # 获取部分
    total_row_count = df_source.shape[0]  # 第1行的所有数据的数量

    # 步骤一 计算分配数量
    # 计算拆分后的每个excel的行数
    # 这个大的excel,会拆分给这几个人
    user_names = ['xiao_shuai', 'xiao_wang', 'xiao_ming', 'xiao_lei', 'xiao_bo', 'xiao_hong']
    # 每个人的任务数目
    splits_size = total_row_count // len(user_names)
    if total_row_count % len(user_names) != 0:
        splits_size += 1
    print(splits_size)

    # 步骤二
    # 拆分成多个dataframe
    df_subs = []
    for idx, user_name in enumerate(user_names):
        # iloc的开始索引
        begin = idx * splits_size
        # iloc的结束索引
        end = begin + splits_size
        # 实现df按照iloc拆分
        df_sub = df_source.iloc[begin:end]
        # 将每个子df存入列表
        df_subs.append((idx, user_name, df_sub))

    # 步骤三
    # 将每个dataframe存入excel
    for idx, user_name, df_sub in df_subs:
        file_name = f"{splits_dir}/sub_{idx}_{user_name}.xlsx"
        df_sub.to_excel(file_name, index=False)

合并:

#########################
    # 合并
    # 合并多个小的Excel到一个大的Excel里

    # 步骤一 获取文件名
    excel_names = []
    for excel_name in os.listdir(splits_dir):
        excel_names.append(excel_name)
    # print(excel_names)  # 将文件名数组生成

    # 步骤二
    # 分别读取到dataframe
    df_list = []
    for excel_name in excel_names:
        # 读取每个excel到df
        excel_path = f"{splits_dir}/{excel_name}"
        df_split = pd.read_excel(excel_path)
        # 得到user_name
        user_name = excel_name.replace("sub_", "").replace(".xlsx", "")[2:]
        print(excel_name, user_name)
        # 给每个df添加1列,即用户名字
        df_split["user_name"] = user_name
        df_list.append(df_split)
    # print(df_list)

    # 步骤三
    # 使用pd.concat进行合并
    df_merged = pd.concat(df_list)
    # print(df_merged.shape)
    # print(df_merged.head())
    # 每个取值出现的次数
    print(df_merged['user_name'].value_counts())

    # 步骤四
    # 将合并后的dataframe输出到excel
    df_merged.to_excel(f"{work_dir}/concatenate_data.xlsx", index=False)

2、pandas实现groupby分组统计

def pandas_groupBy():
    import numpy as np
    df = pd.DataFrame({
        'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
        'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
        'C': np.random.randn(8),
        'D': np.random.randn(8)
    })

    # 分组使用聚合函数做数据统计
    # 1、单个列groupby,查询所有数据列的统计
    print(df.groupby('A').sum())

    # 2、多个列groupby,查询所有数据列的统计
    print(df.groupby(['A', 'B']).mean())
    # 查看'A','B'变成二级索引
    print(df.groupby(['A', 'B'], as_index=False).mean())

    # 3、同时查看多种数据统计
    print(df.groupby('A').agg([np.sum, np.mean, np.std]))

    # 4、查看单列的结果数据统计
    # 方法1:预过滤,性能更好
    print(df.groupby('A')['C'].agg([np.sum, np.mean, np.std]))
    # 方法2
    print(df.groupby('A').agg([np.sum, np.mean, np.std])['C'])

    # 5、不同列使用不同的聚合函数
    print(df.groupby('A').agg({'C': np.sum, 'D': np.mean}))

    # 遍历流程
    # 1、遍历单个列聚合的分组
    g = df.groupby('A')
    for name, group in g:
        print(name)
        print(group)
        print()
    # 可获取单个分组的数据
    g.get_group('bar')

    # 2、遍历多个列聚合的分组
    g = df.groupby(['A', 'B'])
    for name, group in g:
        print(name)
        print(group)
        print()
    print(g.get_group(('foo', 'one')))  # 可以看到2个元素的tuple,代表不同的列
    print(g['C'])#Series对象
    
    #例:
    #查看C的最大数值
    data=df.groupby('A')['C'].max()
    print(data)

更多见官方文档:API 参考手册 | Pandas 中文

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值