028—pandas 根据树状文本解析其上级

前言

本例中,有一列文本数据,每个文本与上一行文本用特定字符表示从属关系,需要我们解析出该行末级的上一级是什么。数据,为了方便观察空格用——代替

需求:

需求为解析出当前行所在的上级,如果已经是根级则它上级仍然是根级。

思路:

先将以上文本结构化,用分隔符号拆解,会生成一个一个层级为一列的数据表,然后对除了最后级外将空缺的上一级内容用上一级行该前方值填充。然后按行进行处理,剔除每行的缺失值,除了根级(剔除缺失值后长度为 1)外,取其右边第二个值,就是我们要的上级内容。

二、使用步骤

1.引入库

代码如下(示例):

import pandas as pd

2.读入数据

代码如下(示例):

'''
class_
A
——B1
——B2
————C1
——B3
————C2
————C3
'''
# 数据中,如第二三行,都属于 A,C1 属于 B2,我们用字母表示,但实际中是具体的不特定的字符。
df = pd.read_clipboard()
df.class_

在这里插入图片描述

#先将文拆开,形成一个表示层级的结构化表格:
(
    df.class_.str.split('——', expand=True)
    .replace({'': None})
)

在这里插入图片描述

#除了最后一列名进行前值填充:
(
    df.class_.str.split('——', expand=True)
    .replace({'': None})
    .apply(lambda x: x if x.name == 2 else x.ffill()) # <--
)

在这里插入图片描述

#增加一个辅助列,用于显示剔除缺失值后的层级列表:
(
    df.class_.str.split('——', expand=True)
    .replace({'': None})
    .apply(lambda x: x if x.name == 2 else x.ffill())
    .assign(foo=lambda x: x.apply(lambda s: s.dropna().to_list(), axis=1))
)

在这里插入图片描述

#针对这个层级列表增加结果列,如果长度为 1 则为根级,否则取列表的倒数第二个,就是它的上级。
(
    df.class_.str.split('——', expand=True) # 将选定列中的字符串按照"——"进行分割,并将结果扩展为多列
    .replace({'': None}) 
    .apply(lambda x: x if x.name == 2 else x.ffill()) # 对每一列应用一个函数,如果列的名称是2,则保持不变,否则使用前向填充(ffill)的方式填充缺失值
    .assign(foo=lambda x: x.apply(lambda s: s.dropna().to_list(), axis=1)) # 该列的值是每一行中去除缺失值后的列表
    .assign(res=lambda x: x.foo.apply(lambda s: s[-2] if len(s)>1 else None)) # 该列的值是"foo"列中列表的倒数第二个元素(如果列表长度大于1),否则为None
)

在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 20:44:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 20:44:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 20:44:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 20:44:01       18 阅读

热门阅读

  1. Excel百万数据如何导入导出

    2024-03-15 20:44:01       19 阅读
  2. 将PostgreSQL插件移植到openGauss指导

    2024-03-15 20:44:01       18 阅读
  3. 【TypeScript】快速掌握TypeScript的基本语法

    2024-03-15 20:44:01       19 阅读
  4. 2024年集创赛FPGA紫光同创赛道男女声,童声变声

    2024-03-15 20:44:01       18 阅读
  5. 蓝桥杯刷题--python-21

    2024-03-15 20:44:01       18 阅读
  6. python中什么是装饰器

    2024-03-15 20:44:01       16 阅读
  7. 在Ubuntu中如何基于conda安装jupyterlab

    2024-03-15 20:44:01       20 阅读