其他
这个引发热议的数据处理需求,原来还有这么巧妙的解法~
大家好,我是才哥。
最近要出差,估摸着没太多时间写文章。。。
今天就以最近频繁看到的一个大家都在讨论的数据处理需求为例,简单介绍一下我的解决方案吧!
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)
)
通过以上四个步骤,我们完美实现需求!
其实,以上操作我们如果认知学习过此前推文《一看就会的Pandas文本数据处理》,就会发现这是多么轻松,嘿嘿!
3. 课外习题
既然大家都熟悉了Pandas文本数据处理,那试试下面这题吧!
也是来自群友们的需求哦~
s = pd.Series(['AA1234(A)', 'AA4567(qula)', 'AA1212', 'AA5678(有任务)'] , dtype='string')
s
期望结果如下:
大家有什么好的解法呢?欢迎在留言区交流!!
推荐阅读
2021-08-29
2021-08-22
2021-08-08
2021-08-30