利用pandas拆分单元格并进行分组聚合

背景:

最近指导老师布置了一个数据分析的任务要将三张表格进行整理 得到错题的数目

页行列表示错题的位置

思路:

我的思路是读取文件夹当中的文件名列表,然后利用for循环和pandas逐一读取每个文件。接下来是对文件的操作:1.逐列将每个单元格的数据拆分成单独的列

2.将拆分的列数据合并为一个整体的df对象

3.将文件夹当中的文件重复上述操作,最后将其合并为一个df对象

4.进行分组聚合操作 得到最后的结果

实操:

这里将重要的几个操作记录一下

1.利用os.listdir 返回得到文件夹当中的文件名 返回的是一个列表

wenjianliebiao=os.listdir(r'E:/数据处理/')

2.拆分为多行数据并合成

df_list=[]
data 为df对象    
lieming=list(data)  #返回df对象的列名列表
for i in lieming:
    df_2 = data[i].str.split('\n', expand=True).stack().reset_index(level=1, drop=True).rename(i)  #将单元格数据进行拆分成多行数据
    df_3=pd.DataFrame({i:df_2})
    df_list.append(df_3)
df_merge=pd.concat(df_list)

核心代码:df_2 = data[i].str.split('\n', expand=True).stack().reset_index(level=1, drop=True).rename(i) #将单元格数据进行拆分成多行数据

将每一列的数据单独进行拆分

data[i] 列当中的数据

str 先将数据强制转换为字符串

split 以\n为间隔符进行切割 expand=True表示是否将数据类型转换为df

 stack()即“堆叠”,作用是将列旋转到行 这一步操作让所有的数据翻转成行

reset_index(level=1, drop=True)  设置行索引 让翻转过后的数据对应相应的索引

rename(i)  设置对象的名称 偏于后续的df对象合成 这里的名称相当于列名

到这里 已经拆分好数据了 接下来是将拆分的数据合成

由于数据类型为serise对象 所以将其转变为df对象进行合成

df_3=pd.DataFrame({i:df_2}) i列名 df_2已经完成分解操作的对象

df_list.append(df_3) 将df对象添加到一个空列表当中

df_merge=pd.concat(df_list) 利用pd.concat合成数据

最终结果:

代码

import  pandas as pd
import  os
wenjianliebiao=os.listdir(r'E:/数据处理/')
df_listzong=[]
for wenjianname in wenjianliebiao:
    df_list=[]
    data=pd.read_excel(f'E:/数据处理/{wenjianname}',index_col=0)  #读取数据  并指定对象的行索引为第一行
    lieming=list(data)  #获取列名列表
    hangming=data._stat_axis.values.tolist()  #获取行索引列表
    for i in lieming:
        df_2 = data[i].str.split('\n', expand=True).stack().reset_index(level=1, drop=True).rename(i)  #将单元格数据进行拆分成多行数据
        df_3=pd.DataFrame({i:df_2})
        df_list.append(df_3)
    df_merge=pd.concat(df_list)
    df_merge.reindex(columns=lieming)
    df_listzong.append(df_merge)
df_mergezong=pd.concat(df_listzong)
df_mergezong.to_excel(r'E:/数据处理/合成数据.xlsx')
df_duqu=pd.read_excel(r'E:/数据处理/合成数据.xlsx')
#更改第一列索引
df_duqu=df_duqu.rename(columns={'Unnamed: 0':'错误类型'})
#根据错误类型进行分组
df_juhe=df_duqu.groupby('错误类型')   
#对分组后的数据进行聚合  得到每种错误类型的错误数量
jieguo=df_juhe.agg('count')
jieguo.to_excel(r'E:/数据处理/结果统计.xlsx')
print(jieguo)

结果展示

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值