python⽤⼏⾏代码实现数据的按列去重及合并处理
前⾔:
Pandas模块是Python⽤于数据导⼊及整理的模块,对数据挖掘前期数据的处理⼯作⼗分有⽤
话不多说,先上pandas官⽅⽂档:
**本次将要实现的需求如下:
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⽂件中
list()将拿到的所有值,转为列表形式
pop(1)表⽰删除列表中下标为1的数据(删除订单ID),此时返回的每⼀个列表,就只有三个数据值了
最后再将每次循环获得的列表值写⼊csv⽂件中
with open('E:\\pythonScripts_autotest\\student_demo.csv',"w", newline='', encoding='GBK')as f:
for new_list in list():
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()python新手代码及作用
with open('E:\\pythonScripts_autotest\\student_demo.csv',"w", newline='', encoding='GBK')as f:
for new_list in list():
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("已转化成功!")

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。