大家好,我是才哥。
最近要出差,估摸着没太多时间写文章。。。
今天就以最近频繁看到的一个大家都在讨论的数据处理需求为例,简单介绍一下我的解决方案吧!
1. 需求说明
有一次在群里看到大佬发的一些数据处理的需求,大佬想让我们也都做一做感受一下,刚好我之前处理过类似需求(就是解析出全部的经纬度坐标),于是就试了一试。
需求大致如下:
从原始数据中解析出经纬度并存在DataFrame
数据中的两列
原始数据如下:
解析后期望数据如下:
那么,可以怎么做呢?
后台回复
210907
可以获取案例数据,方便自己演示体验哈。
2. 处理过程
分析原始数据结构,我们可以发现在括号里是经纬度数据,其满足以下两个特征:
- 经纬度组合以逗号分开
- 每组经纬度中间以空格分开
于是,我就有了以下大致思路:
- 解析出经纬度数据字符串部分
- 按照逗号分隔将字符串变成 经纬度组合 列表
- 再使用爆炸函数将列表“炸开”
- 最后再根据空格对数据进行分割(单元格)
基于以上四个步骤,我们就开始进行操作了,比较开心的是Pandas每一步都有对应的操作函数,于是就有了以下操作:
加载数据
(仅以第一条数据为例演示)
import pandas as pd pd.set_option('display.max_colwidth',1000) df = pd.read_clipboard() df
解析经纬度数据字符串
df.A.str.extract('Polygon \(\((.*)\)\)')
按照逗号分隔将字符串变成 经纬度组合 列表
( df.A.str.extract('Polygon \(\((.*)\)\)') .loc[:,0].str.split(', ') )
使用爆炸函数将列表“炸开”
( df.A.str.extract('Polygon \(\((.*)\)\)') .loc[:,0].str.split(', ') .explode() )
根据空格对数据进行分割(单元格)
( df.A.str.extract('Polygon \(\((.*)\)\)') .loc[:,0].str.split(', ') .explode() .str.split(' ', expand=True, n=1) )
通过以上四个步骤,我们完美实现需求!
其实,以上操作我们如果认知学习过此前推文《》,就会发现这是多么轻松,嘿嘿!
3. 课外习题
既然大家都熟悉了Pandas文本数据处理,那试试下面这题吧!
也是来自群友们的需求哦~
s = pd.Series(['AA1234(A)', 'AA4567(qula)', 'AA1212', 'AA5678(有任务)'] , dtype='string') s
期望结果如下:
大家有什么好的解法呢?欢迎在留言区交流!!