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