python用几行代码实现数据的按列去重及合并处理

本文介绍了如何利用Python的Pandas库对Excel数据进行处理,包括去除重复行,合并具有相同姓名、订单ID和ID的记录,并将不同的商品ID进行追加。通过groupby和agg函数实现数据聚合,最后将处理结果保存为CSV文件。代码详细展示了数据处理的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

Pandas模块是Python用于数据导入及整理的模块,对数据挖掘前期数据的处理工作十分有用
话不多说,先上pandas官方文档:

pandas官方文档
数据处理参考文档A
数据处理参考文档B

**本次将要实现的需求如下:

1.有一个Exscl表数据,该表有学员姓名 ,订单ID,ID ,以及购买的商品ID。数据格式如下:
在这里插入图片描述

2.现在要将上表处理成如下图所示格式:

在这里插入图片描述

3.代码处理逻辑主要如下:

(1)原表共有四列值,去除第二列,并且当前三列的值都一样时,去重。
(2)将第四列的值(商品ID),按照(1)步骤的合并结果,进行追加处理。(例如姓名/订单ID/ID都相同,但是商品ID不同时,就要将商品ID做追加处理)
(3)将处理后的数据,按照原表的index进行排序并保留到csv文件中。

4.代码体现:
(1)先创建一个pandas的对象,用于读取数据源Exscl的数据,生成DataFrame

import pandas as pd
import csv

df = pd.read_excel('aa.xlsx', usecols=[0,1,2,3])

usecols代表读取哪几列的数据

(2)将数据进行去重的处理,并重置索引
groupby()函数用于分组去重,三列一样则去重,三列任意一列有不同,则不去重
agg()函数处理groupby()处理的数据之外的列数据,并将列数据进行聚合,并用,分割格式化处理数据
reset_index()重置索引排序

df = df.groupby(['cUserName','订单ID','ID']).agg(lambda x:','.join(x.values)).reset_index()

(3)将处理的得到的DataFrame写入csv文件中
df.values.tolist()将拿到的所有值,转为列表形式
pop(1)表示删除列表中下标为1的数据(删除订单ID),此时返回的每一个列表,就只有三个数据值了
最后再将每次循环获得的列表值写入csv文件中

    with open('E:\\pythonScripts_autotest\\student_demo.csv', "w", newline='', encoding='GBK') as f:
        for new_list in df.values.tolist():
            new_list[0] = new_list[0].replace("@xyx2008test1", "")
            new_list[3] = str(new_list[3].split(",")).replace("'", '\\"')
            new_list.pop(1)
            writer = csv.writer(f)
            writer.writerow(new_list)

5.完整代码

import pandas as pd
import csv

#skiprowds跳过行,skiprowds跳过列,usecols读取指定列
df = pd.read_excel('E:\\pythonScripts_autotest\\xyx_student_demo.xlsx',usecols=[0,1,2,3])

# def func(df):
#     # print( ','.join(df.values))
#     return ','.join(df.values)
#
# def func_2(df):
#     return df.values

def data_list(df):
    # 分组聚合,groupby函数用于分组,三列一样则去重,三列任意一列有不同,则不去重
    # agg()函数表示处理groupuy处理的数据之外的列数据。并进行聚合
    #为什么不能直接print函数func(),因为你不用agg时,df.values拿到的是整个sheet的数据,用了agg,只返回某列数据
    #reset_index()函数用来重置索引
    df = df.groupby(['cUserName','订单ID','ID']).agg(lambda x:','.join(x.values)).reset_index()
    with open('E:\\pythonScripts_autotest\\student_demo.csv', "w", newline='', encoding='GBK') as f:
        for new_list in df.values.tolist():
            new_list[0] = new_list[0].replace("@xyx2008test1", "")
            new_list[3] = str(new_list[3].split(",")).replace("'", '\\"')
            new_list.pop(1)
            writer = csv.writer(f)
            writer.writerow(new_list)
    print("已转化成功!")
数据纵向合并,通常是指将多个数据集按照某些共享的(如ID)进行堆叠或拼接,形成一个新的数据表。在Jupyter Notebook中,你可以使用pandas库来完成这个任务,其中最常用的是`concat()`或`merge()`函数。 这里是一个简单的例子,假设你有两个CSV文件,每个文件都有一个共同的标识符`id`,你想按此字段进行纵向合并: ```python import pandas as pd import os # 首先,读取两个数据集 data1 = pd.read_csv('file1.csv') data2 = pd.read_csv('file2.csv') # 检查数据是否已读入,并查看前几行确认ID是否存在 print(data1.head()) print(data2.head()) # 确定合并键(如果`id`不存在,需要替换为实际的键) merge_key = 'id' # 使用pandas的concat()函数进行垂直(row-wise)合并 # 这里我们假设所有数据集的结构相同,如果不一致可以添加`axis=0`参数调整 merged_data = pd.concat([data1, data2], ignore_index=True) # 如果id有复,可以检查并处理,例如 if merged_data.duplicated(subset=[merge_key]).sum() > 0: merged_data.drop_duplicates(subset=[merge_key], keep='first', inplace=True) # 输出合并后的数据 print(merged_data.head()) ``` 在这个过程中,如果有数据加载错误或者合并后的数据不符合预期,你需要通过运行以上代码段并检查输出结果,找出问题所在。例如,检查合并后的名是否正确,数据是否有缺失值,是否丢失了数据等。如果遇到问题,可以使用`try-except`结构捕获异常,并记录下具体的错误信息以便调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值