查看原文
其他

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

道才 可以叫我才哥 2023-02-06

大家好,我是才哥。

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

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


1. 需求说明

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

需求

需求大致如下:

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

原始数据如下:

原始数据预览

解析后期望数据如下:

期望结果预览

那么,可以怎么做呢?

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


2. 处理过程

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

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

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

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

基于以上四个步骤,我们就开始进行操作了,比较开心的是Pandas每一步都有对应的操作函数,于是就有了以下操作:

加载数据

(仅以第一条数据为例演示)

import pandas as pd
pd.set_option('display.max_colwidth',1000)

df = pd.read_clipboard()
df
第0步:读取数据

解析经纬度数据字符串

df.A.str.extract('Polygon \(\((.*)\)\)')
第1步:提取经纬度字符串

按照逗号分隔将字符串变成 经纬度组合 列表

(
    df.A.str.extract('Polygon \(\((.*)\)\)')
    .loc[:,0].str.split(', ')
)
第2步:分割字符串为列表

使用爆炸函数将列表“炸开”

(
    df.A.str.extract('Polygon \(\((.*)\)\)')
    .loc[:,0].str.split(', ')
    .explode()
)
第3步:爆炸列

根据空格对数据进行分割(单元格)

(
    df.A.str.extract('Polygon \(\((.*)\)\)')
    .loc[:,0].str.split(', ')
    .explode()
    .str.split(' ', expand=True, n=1)
)
第4步:列分割

通过以上四个步骤,我们完美实现需求!

其实,以上操作我们如果认知学习过此前推文《一看就会的Pandas文本数据处理》,就会发现这是多么轻松,嘿嘿!


3. 课外习题

既然大家都熟悉了Pandas文本数据处理,那试试下面这题吧!

也是来自群友们的需求哦~

s = pd.Series(['AA1234(A)''AA4567(qula)''AA1212''AA5678(有任务)'] , dtype='string')
s
原始数据

期望结果如下:

期望结果

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




推荐阅读


只需8招,搞定Pandas数据筛选与查询

2021-08-29

5招学会Pandas数据类型转化

2021-08-22

一看就会的Pandas文本数据处理

2021-08-08

对比Excel,用Pandas轻松搞定IF函数操作

2021-08-30

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存