首页 > 其他分享 ># yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据

# yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据

时间:2023-08-20 10:02:07浏览次数:31  
标签:yyds 平台 账号 df 商户 合并 Pandas pandas

大家好,我是皮皮。

一、前言

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

# yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据_Pandas

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

# yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据_原始数据_02

二、实现过程

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

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

# yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据_正则表达式_03

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

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

# yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据_原始数据_04

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

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

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)

代码运行后的结果如下:

# yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据_Pandas_05

完美实现群友的需求!

三、总结

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

最后感谢粉丝【wen】提问,感谢【瑜亮老师】给出的思路和代码解析,感谢【莫生气】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

# yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据_Pandas_06

标签:yyds,平台,账号,df,商户,合并,Pandas,pandas
From: https://blog.51cto.com/u_13389043/7158117

相关文章

  • pandas常用速查
    pandas常用速查引入依赖#导入模块importpymysqlimportpandasaspdimportnumpyasnpimporttime#数据库fromsqlalchemyimportcreate_engine#可视化importmatplotlib.pyplotasplt#如果你的设备是配备Retina屏幕的mac,可以在jupyternotebook中,使用下面......
  • 67个常用pandas命令
    导入数据pd.DataFrame()#自己创建数据框,用于练习pd.read_csv(filename)#从CSV⽂件导⼊数据pd.read_table(filename)#从限定分隔符的⽂本⽂件导⼊数据pd.read_excel(filename)#从Excel⽂件导⼊数据pd.read_sql(query,connection_object)#从SQL表/库导⼊数据p......
  • #yyds干货盘点# LeetCode程序员面试金典:是子序列
    1.简述:给定字符串s 和t,判断 s 是否为 t 的子 序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,是的一个子序列,而不是)。"ace""abcde""aec"进阶:如果有大量输入的S,称作S1,S2,...,Sk其中k>=10亿,你需要依次......
  • #yyds干货盘点# LeetCode程序员面试金典:最大正方形
    题目:在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 示例1:输入:matrix=[["1","0","1","0","0"],["1","0","1","1","1"],["1&qu......
  • #yyds干货盘点#electron-egg: 当代桌面开发框架
    当前技术社区中出现了各种下一代技术或框架,却很少有当代可以用的,于是electron-egg就出现了。当前桌面软件技术有哪些?语言技术优点缺点C#wpf专业的桌面软件技术,功能强大学习成本高Javaswing/javaFx跨平台和语言流行GUI库少,界面不美观C++Qt跨平台,功能和类库丰富学习成本高Swift无非跨......
  • pandas生成表格: 字典键值列表需对齐,而二维表格无此要求 键值需至少有一个为列表,否
    生成表格:字典键值列表需对齐,而二维表格无此要求键值需至少有一个为列表,否则需指定index,否则ValueErrordf_test=pd.DataFrame({'a':[1,2],'b':[3,None]})#生成表格:#字典键值列表需对齐,而二维表格无此要求#键值需至少有一个为列表,否则需指定index,否则ValueError:If......
  • 【pandas小技巧】--统计值作为新列
    这次介绍的小技巧不是统计,而是把统计结果作为新列和原来的数据放在一起。pandas的各种统计功能之前已经介绍了不少,但是每次都是统计结果归统计结果,原始数据归原始数据,没有把它们合并在一个数据集中来观察。下面通过两个场景示例来演示如果把统计值作为新列的数据。1.成绩统计的......
  • #yyds干货盘点#jdk8小版本差异
    1JavaSE8u202andolderupdatesareavailable,undertheBinaryCodeLicense(“BCL”).从官网上可知,在OracleJDK的版本历史中,JDK8u202是最后一个免费的版本,支持免费商业用途2在JDK8u131中,JDK增加了一个新的特性,使得Java运行时可以自动检测它是在Docker容器中运行,然后使用......
  • #yyds干货盘点# LeetCode程序员面试金典:存在重复元素 II
    题目:给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i]==nums[j] 且 abs(i-j)<=k 。如果存在,返回 true ;否则,返回 false 。 示例 1:输入:nums=[1,2,3,1],k=3输出:true示例2:输入:nums=[1,0,1,1],k=1输出......
  • #yyds干货盘点# LeetCode程序员面试金典:组合和四
    1.简述:给你一个由 不同 整数组成的数组 ,和一个目标整数 。请你从 中找出并返回总和为 的元素组合的个数。numstargetnumstarget题目数据保证答案符合32位整数范围。 示例1:输入:nums=[1,2,3],target=4输出:7解释:所有可能的组合为:(1,1,1,1)(1,1,2)(1,2,1)......