这个引发热议的数据处理需求,原来还有这么巧妙的解法~

2021-09-24 15:55:03 浏览数 (1)

大家好,我是才哥。

最近要出差,估摸着没太多时间写文章。。。

今天就以最近频繁看到的一个大家都在讨论的数据处理需求为例,简单介绍一下我的解决方案吧!

1. 需求说明

有一次在群里看到大佬发的一些数据处理的需求,大佬想让我们也都做一做感受一下,刚好我之前处理过类似需求(就是解析出全部的经纬度坐标),于是就试了一试。

需求

需求大致如下:

从原始数据中解析出经纬度并存在DataFrame数据中的两列

原始数据如下:

原始数据预览

解析后期望数据如下:

期望结果预览

那么,可以怎么做呢?

后台回复 210907 可以获取案例数据,方便自己演示体验哈。

2. 处理过程

分析原始数据结构,我们可以发现在括号里是经纬度数据,其满足以下两个特征:

  • 经纬度组合以逗号分开
  • 每组经纬度中间以空格分开

于是,我就有了以下大致思路:

  1. 解析出经纬度数据字符串部分
  2. 按照逗号分隔将字符串变成 经纬度组合 列表
  3. 再使用爆炸函数将列表“炸开”
  4. 最后再根据空格对数据进行分割(单元格)

基于以上四个步骤,我们就开始进行操作了,比较开心的是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

原始数据

期望结果如下:

期望结果

大家有什么好的解法呢?欢迎在留言区交流!!

0 人点赞