前言:
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文件中
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
df = pd.read_excel('E:\\pythonScripts_autotest\\xyx_student_demo.xlsx',usecols=[0,1,2,3])
def data_list(df):
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("已转化成功!")
Original: https://blog.csdn.net/Van_CLB/article/details/115076464
Author: Van_pre
Title: python用几行代码实现数据的按列去重及合并处理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/741560/
转载文章受原作者版权保护。转载请注明原作者出处!