前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas实战——灵活使用pandas基础知识轻松处理不规则数据

Pandas实战——灵活使用pandas基础知识轻松处理不规则数据

作者头像
Python进阶者
发布2023-08-31 08:57:05
1590
发布2023-08-31 08:57:05
举报

一、前言

前几天在Python最强王者群【wen】问了一个pandas数据合并处理的问题,一起来看看吧。他的原始数据如下所示:

然后预期的结果如下所示:

二、实现过程

这里【瑜亮老师】给了一个指导如下:原始数据中包含所有所需的信息,但是因为源系统导出的格式问题,有些数据被分配到了合并行中,并且每个单独的表中都是统一格式。

源数据中'商品', '单价', '支付方式', '销售地', '销量'是已经处理好的数据,不需要单独处理。需要获取的信息是'平台', '商户', '账号',这三个均在合并行中,群友的建议都是使用re正则表达式获取。

获取到上面数据后,还需要删掉多余的行。仔细观察原始表格我们可以发现:每个单独表格是由一个平台、商户、账号所查询的,且所需平台、商户、账号数据分布在合并行中,而这些合并行在被pandas读取后会形成只有第一列有数值,其他列为NaN的情况。

处理过后的格式情况如下:

这就给了我们去掉这些合并行的简便方法:dropna。

而用正则获取到的平台、商户、账号只有一行,需要对数据进行向下填充空值。而pandas中fillna(method='ffill')即可实现使用前值去填充下面空值的需求。最后,瑜亮老师出手,实现需求,代码如下:

代码语言:javascript
复制
import pandas as pd


# 读取Excel文件
df = pd.read_excel('20230812.xlsx', header=None)

# 去除重复行
df = df.drop_duplicates(ignore_index=False).reset_index(drop=True)

# 根据正则表达式获取“账号”,“平台”,“商户”
df['账号'] = df[0].str.extract(r'账号:(\d+)', expand=False).fillna(method='ffill')
df['平台'] = df[0].str.extract(r'平台:(.*?),', expand=False).fillna(method='ffill')
df['商户'] = df[0].str.extract(r'商户:(.*?),', expand=False).fillna(method='ffill')

#  去除含有空值的行(即excel中所有的合并行
df = df.dropna().reset_index(drop=True)

# 设置df的列名
df.columns = ['商品', '单价', '支付方式', '销售地', '销量', '账号', '平台', '商户']
df = df[['平台', '商户', '账号', '商品', '单价', '支付方式', '销售地', '销量']]
print(df)

代码运行后的结果如下:

完美实现群友的需求!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Pandas数据合并处理问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

往期精彩文章推荐:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、实现过程
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档