python pandas列表爆炸
0 背景
爆炸这个词很有意思,在这里是指将类似列表的每个元素”展开”,使得每个元素都能成为新行的过程,并且索引值是相同的。在一些场景下尤其是有用的。
在实际的数据处理和办公场景中,我们常常需要处理用特定符号分隔的数据, 比如一些特殊的分列。为了分析这些数据,首先必须将它们转换为二维形式。Pandas 通过其 explode()
方法提供了一种便捷的方式来实现这种转换,允许我们轻松地将含有列表或其他可迭代对象的列展开成多行。了解这一功能的灵活应用对于高效处理复杂数据结构是非常便捷的。
1 使用
参数说明
explode()
def explode(
self,
column: IndexLabel,
ignore_index: bool = False,
) -> DataFrame:
-
column:需要被”爆炸”的列的名称。在 DataFrame 里面该参数里面是必须的, 在Series里面是不需要该参数的。 -
ignore_index:布尔类型,可选,默认为 False
。当设置为True
时,explode
操作后的DataFrame将使用新的整数索引而非保留原有的索引。
初始化数据
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [1, 2, 3],
'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