抛弃你的Excel吧,5行Python代码快速处理合并单元格
在日常处理数据的过程中,我们经常遇到带有合并单元格的excel文件,或者带有空值的csv文件,使用excel打开后如下图所示,但这对数据分析是很不友好的,作为一个Data Analyst,看到这么糟心的数据,怎么能忍?赶紧掏出万能的Pandas来tidy data!
带有合并单元格的数据(示例需求分析:想要根据哪一列的粒度整理数据?如果是 class_id 这一列,则整理后的结果将成为4行 ,同一个class_id 下的student_list 将会被合并到一个单元格内,可以考虑使用 , 将不同的元素隔开如果是 student_list 这一列,则整理后的结果将成为8 行,有合并单元格的列将会被拆分开来,且在有空值的位置补上对应的正确的值处理步骤准备工作用到的库: pandas 用到的函数: fillna() ,groupby() ,agg() ,merge() 1.读取数据
可以看到将数据读取到DataFrame后,在有合并单元格的列中,将会有值为 NaN 的单元格出现# 引入 pandas 库 import pandas as pd # 读取样例数据,这里读取的是 csv 数据 df = pd.read_csv("../data/test.csv")
测试数据2.寻找主键列并为空值单元格填充数据
需要先找出一个 没有重复值且带有合并单元格 的 列 或组合列 ,也叫主键 或联合主键 ,通过以下代码将只为空的单元格进行填充。本例以class_id 列为例。df["class_id"] = df["class_id"].fillna(method="ffill")
可以看到 class_id 这一列的空值已被填充,且产生了重复值。
为主键填充空值
如果你是需求分析中的 需求2 ,那么到这一步其实已经接近最终结果了,你可以采用同样的方法将其他两列的空值进行填充,或者对多个列同时进行空值填充:df = df[["class_id", "class_name", "remark"]].fillna(method="ffill") 。
如果你是需求分析中的需求1 ,那么请继续以下步骤。3.对数据进行分组
本步骤需要对没有合并单元格的列根据上一步中所使用的列进行分组,并将组内的数据使用 , 连接起来。本例中使用的没有合并单元格的列是student_list 列。可以看到示例数据集已经被根据class_id 分为4组,且各组内的student_list 元素已分别被, 连接起来放到一个单元格中,新生成的 df_student 数据集的索引是class_id 。df_student = df.groupby("class_id").agg({"student_list": ", ".join})
对数据进行分组4.去除带有空值的行
此步需要对原数据进行中带有空值的行去掉,并将 student_list 列丢弃。
丢弃 student_list 列的原因是:在上一步已经生成了一个新的数据集df_student ,这个数据集中的student_list 列才是我们想要的数据# axis=0 代表去除带有一个或多个空值的行,对应的 axis=1 代表去除带有一个或多个空值的列,本例中我们需要去除带有空值的行 df = df.dropna(axis=0).drop("student_list", axis=1)
去除带有空值的行后的数据5.合并数据集
此步骤将上述步骤中产生的两个数据集 df 和df_student 进行合并,得到最终想要的结果集。# 采用 merge() 函数将 df 和 df_student 根据 class_id 进行左连接合并数据 # left_on="class_id" 代表 df 采用 class_id 作为连接条件 # right_index=True 代表 df_student 将索引作为连接条件 df = pd.merge(df, df_student, how="left", left_on="class_id", right_index=True, copy=False)
最终结果集补充:数据连接示意图
数据连接示意图
如果你觉得此文对你有帮助,请记得 点赞 收藏 + 关注 哦
俄罗斯的能源武器真有趣,逼欧洲人洗澡只洗4个地方作者挥戈欢迎来到朝晖前哨,我是挥戈。今天讲讲普京出访的一件事,很有意思的事情,关于洗澡。欧洲人本来想让出访伊朗的普京难堪一下的,结果,没想到,普京还专门挑这件事来说,这不是正中了别
杭州退休人员的人均养老金有多少?怎么算是比较高的水平?杭州退休人员的人均养老金有多少?怎么算是比较高的水平?根据杭州公布的2021年国民经济和社会发展统计公报以及社会保障事业统计公报,居民收入情况,居民消费情况离退休人数等数据都有披露
安徽的包青天,家乡的包拯记得小时候看周杰版的电视剧少年包青天饰演的包拯,是以面目黑呦,额顶月牙的形象示人的。其面黑,也被称包黑子,包黑炭,相貌十分奇特,脑门上还有一个新月,在我们的心中包拯就应该长这个样子
神隐5年一夜爆红,尬聊第一人与王源擦出火花,梁博经历了什么?吴莫愁没能得到的热度,梁博仅用了两个字就轻松拿下。2014年吴莫愁为某饮品演唱的广告曲就现在引发热潮,点击量火速飙升,一举成为国内首个点击率突破一亿的mv。不过吴莫愁这首歌的传唱度
我建议你,不要一直自杀式单身找个对象比登天都难!上周六晚上,熊的后台突然跳出了这样一句哀嚎。留言的女生说,她刚追完一部超甜的恋综,此时此刻的她,真的很想很想很想谈恋爱。熊从留言中感受到了女生的落寞情绪,所以赶
多少00后的暑假,在整形医院里度过2022年夏天,第一批00后大学生毕业了。又是一年毕业季!又是一年求职季!有没有人还记得00后出生的前后几年,先有腾讯阿里巴巴百度成立,接着搜狐新浪网易在美国上市,中国的互联网进入
神评爆笑合集弟弟走丢了,那一晚村子里谁家都没敢开门工作中的你是不是也是这样的啊团队再厉害也挡不住有人拖后腿啊在这里蹭网是一种什么体验你是什么呢还真的被你们骗到了只要心中有梦想哪里都是舞台小伙子我怎么感觉你是故意的呢你把这个拿走了他
中移金科积极拓展科技金融新领域服务中证网讯(记者董添)7月21日,记者从中国移动全资子公司中移金科获悉,公司积极拓展科技金融新领域服务,打造通信消费金融生态圈。目前,公司除了落地数字人民币硬件钱包SIMPAY外,还
成年人的穿搭,得体比漂亮更重要我作为一个教穿搭的老师,经常被问怎么看怎么理解穿衣自由?先讲个我很羞愧的经历我和闺蜜去泰国度假,每天穿着比基尼,在海滩上吹着自由的风冲着自由的浪,感受热带岛屿带给我们的身心自由。有
俄罗斯将扩展特别军事行动范围最新动态俄称将扩展特别军事行动范围泽连斯基说乌为开始加入欧盟谈判做准备俄罗斯外长拉夫罗夫20日表示,俄特别军事行动的地理范围已不局限于顿巴斯地区,将继续扩展。乌克兰总统泽连斯基20
中国女性幸福指数调查报告中国女性幸福指数调查报告方式通过网络及街头调查,共收到有效答卷26532份。01hr饮食男女,人之大欲存焉,男女,即当下俗称的性福问题,越来越得到普遍的关注。由中国妇女儿童事业发展