python pandas列表爆炸

python pandas列表爆炸

0 背景

python pandas列表爆炸

爆炸这个词很有意思,在这里是指将类似列表的每个元素”展开”,使得每个元素都能成为新行的过程,并且索引值是相同的。在一些场景下尤其是有用的。

在实际的数据处理和办公场景中,我们常常需要处理用特定符号分隔的数据, 比如一些特殊的分列。为了分析这些数据,首先必须将它们转换为二维形式。Pandas 通过其 explode() 方法提供了一种便捷的方式来实现这种转换,允许我们轻松地将含有列表或其他可迭代对象的列展开成多行。了解这一功能的灵活应用对于高效处理复杂数据结构是非常便捷的。

1 使用

参数说明

explode()

def explode(
    self,
    column: IndexLabel,
    ignore_index: bool = False,
)
 -> DataFrame:

  1. column:需要被”爆炸”的列的名称。在 DataFrame 里面该参数里面是必须的, 在Series里面是不需要该参数的。
  2. ignore_index:布尔类型,可选,默认为 False。当设置为 True 时,explode 操作后的DataFrame将使用新的整数索引而非保留原有的索引。

初始化数据

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'id': [123],
    'name': ['orange''ikun''aple'],
    'favorite_colors': [['red''blue'], ['yellow'], ['purple''yellow''green']]
})

id name favorite_colors
0 1 orange [red, blue]
1 2 ikun [yellow]
2 3 aple [purple, yellow, green]

列表爆炸

我们对favorite_colors列, 将其炸开:

df.explode('favorite_colors')

id name favorite_colors
0 1 orange red
0 1 orange blue
1 2 ikun yellow
2 3 aple purple
2 3 aple yellow
2 3 aple green

可以看到, favorite_colors列的列表数据, 都被拆分成单独的行, 但是他们仍保持原来数据表的对应的索引.

除了 DataFrame , Series也可以使用炸开的操作:

s = pd.Series([
    ['orange''ikun'],
    None,
    [],
    'sing',
])

<unnamed>
0 [orange, ikun]
1 None
2 []
3 sing
s.explode()

<unnamed>
0 orange
0 ikun
1 None
2 NaN
3 sing

非列表格式的爆炸

比如, 我们现在有这样的数据:

df2 = pd.DataFrame({
    'name': ['orange''ikun'],
    'hobby': ['eat,sleep''sing,dance,rap,basketball']
})

name hobby
0 orange eat,sleep
1 ikun sing,dance,rap,basketball
df2.hobby.str.split(',').explode()

hobby
0 eat
0 sleep
1 sing
1 dance
1 rap
1 basketball

可以看到, hobby 列通过使用逗号作为分隔符将字符串分列成列表的方法后, 可以进行爆炸, 然后, 我们将这个方式放到Dtaframe里面去, 再实施爆炸:

df2.assign(hobby=df2.hobby.str.split(',')).explode('hobby')

name hobby
0 orange eat
0 orange sleep
1 ikun sing
1 ikun dance
1 ikun rap
1 ikun basketball

2 其他

实际工作场景下, 非列表格式的爆炸可能会遇到的更多, 需要将其展开时, 我们便可以使用列表爆炸的方法.

如果你觉得这期内容不错的话, 欢迎点赞, 在看, 关注我的微信公众号


原文始发于微信公众号(其之):python pandas列表爆炸

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204729.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!