【python】筛选出异常数据排除,对错误内容修改,根据某列筛选后对另两列进行拼接并统计次数。

本文介绍了如何使用Python的pandas库处理Excel数据,包括排除特定条件(如出差、特定年份和月份),按姓名合并年月统计数据,以及对特定关键字的合并和计数。最后,通过多步骤操作生成了三个Excel文件:1.xlsx、2.xlsx和3.xlsx。
摘要由CSDN通过智能技术生成

 实际处理的数据要比这个多而杂,现以下表为例。主打实用,大神勿喷。

思路:

  1、对于出差的、2024年都排除掉,不参与统计。

  2、把“月”中的12月888改为正常的12月。

  3、以“姓名”中相同名字对应的年月进行拼接,并统计数量,并保存1.xlsx。

  4、读1.xlsx,将列“Merged_年_月”中相同姓名所对应包含12月和10月的年份进行求合并, 并去掉年份。保存为2.xlsx。把统计的次数去掉保存为3.xlsx。

  //一言不合就另存为。

数据模板:

姓名部门当月完成工作
刘一采购部2022年1月完成修炼科目1
刘一采购部2022年2月完成修炼科目2
刘一采购部2022年3月完成修炼科目3
刘一采购部2022年4月完成修炼科目4
刘一采购部2022年5月完成修炼科目5
刘一采购部2022年6月完成修炼科目6
刘一采购部2022年7月完成修炼科目7
刘一采购部2022年8月完成修炼科目8
刘一采购部2023年9月完成修炼科目7
刘一采购部2023年10月完成修炼科目8
刘一采购部2023年11月完成修炼科目9
刘一采购部2023年12月完成修炼科目10
刘一采购部2023年9月完成修炼科目11
刘一采购部2023年10月完成修炼科目12
刘一采购部2024年11月完成修炼科目13
刘一采购部2024年12月完成修炼科目14
刘一采购部2024年9月完成修炼科目15
刘一采购部2024年10月完成修炼科目16
刘一采购部2024年11月完成修炼科目17
刘一采购部2024年12月888完成修炼科目20
刘一采购部2024年9月完成修炼科目21
杨二销售部2022年10月完成修炼科目1
杨二销售部2022年11月完成修炼科目2
杨二销售部2022年12月出差
杨二销售部2022年9月完成修炼科目4
杨二销售部2022年10月完成修炼科目5
杨二销售部2022年11月完成修炼科目6
杨二销售部2022年12月完成修炼科目7
杨二销售部2022年9月完成修炼科目8
杨二销售部2022年10月完成修炼科目8
杨二销售部2022年11月完成修炼科目9
杨二销售部2022年12月888完成修炼科目10
杨二销售部2022年9月完成修炼科目11
杨二销售部2022年10月完成修炼科目12
杨二销售部2022年11月完成修炼科目13
杨二销售部2023年12月完成修炼科目14
杨二销售部2023年9月出差
杨二销售部2023年10月完成修炼科目16
杨二销售部2023年11月完成修炼科目17
杨二销售部2023年12月888完成修炼科目19
刘三财务部2024年9月完成修炼科目20
刘三财务部2024年10月完成修炼科目1
刘三财务部2022年11月完成修炼科目3
刘三财务部2022年12月888完成修炼科目4
刘三财务部2022年9月完成修炼科目5
刘三财务部2022年10月完成修炼科目6
刘三财务部2022年11月完成修炼科目7
刘三财务部2022年12月完成修炼科目8
刘三财务部2022年9月完成修炼科目7
刘三财务部2022年10月完成修炼科目8
刘三财务部2022年11月完成修炼科目10
刘三财务部2022年12月完成修炼科目11
刘三财务部2022年9月完成修炼科目12
刘三财务部2022年10月完成修炼科目13
刘三财务部2022年11月完成修炼科目14
刘三财务部2022年12月完成修炼科目15
刘三财务部2022年9月出差
刘三财务部2023年10月完成修炼科目17
刘三财务部2023年11月完成修炼科目19
刘三财务部2023年12月完成修炼科目20
刘三财务部2023年9月完成修炼科目2
刘三财务部2023年10月完成修炼科目3
刘三财务部2023年11月完成修炼科目4
刘三财务部2024年12月完成修炼科目5
刘三财务部2022年9月完成修炼科目6
刘三财务部2022年10月完成修炼科目7
刘三财务部2022年11月完成修炼科目8
刘三财务部2023年12月完成修炼科目10
刘三财务部2023年9月完成修炼科目11
刘三财务部2023年10月完成修炼科目12
刘三财务部2023年11月完成修炼科目13
刘三财务部2023年12月完成修炼科目15
刘三财务部2023年9月完成修炼科目16
刘三财务部2024年10月完成修炼科目17
刘三财务部2022年11月完成修炼科目19
刘三财务部2022年12月完成修炼科目20
刘三财务部2022年9月完成修炼科目1
刘三财务部2023年10月完成修炼科目2
刘三财务部2023年11月完成修炼科目3
刘三财务部2023年12月完成修炼科目4
刘三财务部2023年9月完成修炼科目5
刘三财务部2023年10月完成修炼科目6
刘三财务部2023年11月完成修炼科目7
刘三财务部2024年12月完成修炼科目8
刘三财务部2022年9月完成修炼科目7
刘三财务部2022年10月完成修炼科目8
刘三财务部2022年11月完成修炼科目9
刘三财务部2023年12月完成修炼科目10
刘三财务部2023年9月完成修炼科目11
刘三财务部2023年10月完成修炼科目12
刘三财务部2023年11月完成修炼科目13
刘三财务部2023年12月完成修炼科目14

输出结果展示

1.xlsx

2.xlsx

3.xlsx

   想筛选自己想要的数据就得多加筛选条件,具体放在什么位置得看情况,主打就是一个变通。

    还得一步一步的调试。

代码如下:


import pandas as pd
import re

def rename_on_keywords(text, keywords):
    for keyword in keywords:
        if keyword in text:
            return keyword
    return text

def merge_groups_on_keywords(text, keywords):
    for keyword in keywords:
        groups = re.findall(f'([^、]*{keyword}[^、]*\(\d+\))', text)
        counts = [int(re.search('\((\d+)\)', group).group(1)) for group in groups]
        if groups:
            text = text.replace(groups[0], f'{keyword} ({sum(counts)})')
            for group in groups[1:]:
                text = text.replace('、' + group, '')
    return text

# 读取 Excel 文件
df = pd.read_excel('kq.xlsx', engine='openpyxl')

# 列名定义
column1_name = '姓名'
column2_name = '年'
column3_name = '月'
column4_name = '当月完成工作'
column5_name = '年'
column6_name = '月'
column_to_rename = '月'
keywords = ['12月']

# 定义你想要排除的特定值列表
specific_values4 = ['出差']
specific_values5 = ['2024']
specific_values6 = ['11']

# 排除 'Column4' 和 'Column5' 中等于特定值列表的行
df = df[~df[column4_name].isin(specific_values4) & ~df[column5_name].isin(specific_values5)& ~df[column6_name].isin(specific_values6)]

# 对于每个 '姓名',在其对应的列中,找出包含特定关键字的唯一值,并将这些值替换为关键字本身
df[column_to_rename] = df.groupby(column1_name)[column_to_rename].transform(lambda x: x.apply(lambda y: rename_on_keywords(y, keywords)))

# 对 Column1 进行分组,并将每个组的 Column2 和 Column3 值合并为一个字符串,并计算每个字符串的出现次数
merged = df.groupby(column1_name).apply(lambda x: '、'.join([f'{v} ({c})' for v, c in (x[column2_name] + ' ' + x[column3_name]).value_counts().items()]))

# 将结果转换为 DataFrame
merged_df = merged.reset_index()
merged_df.columns = [column1_name, 'Merged_' + column2_name + '_' + column3_name]

# 将结果保存到新的 Excel 文件中
merged_df.to_excel('1.xlsx', index=False)

# 读取保存的 Excel 文件
df = pd.read_excel('1.xlsx')

# 列名定义
column2_name = 'Merged_年_月'
keywords = ['12月','10月']

# 对每个“用户名”对应的列中包含关键字的部分进行合并,并且重新命名为关键字,然后对次数进行求和
df[column2_name] = df[column2_name].apply(lambda x: merge_groups_on_keywords(x, keywords))

# 将最终结果保存到新的 Excel 文件中
df.to_excel('2.xlsx', index=False)


# 读取 Excel 文件
df = pd.read_excel('2.xlsx')

# 定义一个函数来去除括号里的次数
def remove_counts(text):
    return re.sub(r'\s\(\d+\)', '', text)

# 列名定义
column_name = 'Merged_年_月'

# 去除次数
df[column_name] = df[column_name].apply(remove_counts)

# 将最终结果保存到新的 Excel 文件中
df.to_excel('3.xlsx', index=False)

一步一坑,努力码,特此备忘。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值