看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
explode()
方法用于将 DataFrame 中的列拆分为多个行。特别适用于列包含列表或其他可迭代对象的情况。此方法会将每个列表中的元素转换为单独的行,从而展开 DataFrame。
explode()
方法主要用于处理列中包含以下类型的数据:
此例程将分解序列,包括列表、元组、集合、系列和np.ndarray。子集行的结果数据类型将是object。标量将原封不动地返回,空列表喜欢将导致该行的np.nan。此外,在爆炸集合时,输出中的行顺序将是不确定的。
DataFrame.explode(
column,
ignore_index=False
)
Series.explode(ignore_index=False)
Series.struct.explode()
column (IndexLabel
): 将爆炸列。
要展开的列名。该列应该包含可迭代对象(如列表、元组等)。explode()
方法将对该列中的每个可迭代对象进行展开处理。对于多列,指定一个非空列表,每个元素都是str或tuple,并且所有指定的列——它们在帧的同一行上的类似列表的数据——必须具有匹配的长度。
ignore_index (bool
, 默认为 False
):
如果为 True
,则忽略原索引,重新为结果 DataFrame 生成默认整数索引。如果为 False
,则保留原有索引。
DataFrame
ignore_index=True
,则索引会被重置;否则,原有索引会被保留。explode()
方法常用于以下情况:
df = pd.DataFrame({'A': [[0, 1, 2], 'foo', [], [3, 4]],
'B': 1,
'C': [['a', 'b', 'c'], np.nan, [], ['d', 'e']]})
df
'''
A B C
0 [0, 1, 2] 1 [a, b, c]
1 foo 1 NaN
2 [] 1 []
3 [3, 4] 1 [d, e]
'''
单列爆炸:
df.explode('A')
'''
A B C
0 0 1 [a, b, c]
0 1 1 [a, b, c]
0 2 1 [a, b, c]
1 foo 1 NaN
2 NaN 1 []
3 3 1 [d, e]
3 4 1 [d, e]
'''
多列爆炸:
df.explode(list('AC'))
'''
A B C
0 0 1 a
0 1 1 b
0 2 1 c
1 foo 1 NaN
2 NaN 1 NaN
3 3 1 d
3 4 1 e
'''
Series:
s = pd.Series([[1, 2, 3], 'foo', [], [3, 4]])
s
'''
0 [1, 2, 3]
1 foo
2 []
3 [3, 4]
dtype: object
'''
s.explode()
'''
0 1
0 2
0 3
1 foo
2 NaN
3 3
3 4
dtype: object
'''
struct:
import pyarrow as pa
s = pd.Series(
[
{"version": 1, "project": "pandas"},
{"version": 2, "project": "pandas"},
{"version": 1, "project": "numpy"},
],
dtype=pd.ArrowDtype(pa.struct(
[("version", pa.int64()), ("project", pa.string())]
))
)
s.struct.explode()
'''
version project
0 1 pandas
1 2 pandas
2 1 numpy
'''
假设有一个包含列表的 DataFrame,我们希望将列表中的每个元素转换为单独的行。
import pandas as pd
# 构造示例数据
data = {
'A': [1, 2, 3],
'B': [[4, 5], [6], [7, 8, 9]]
}
df = pd.DataFrame(data)
# 使用 explode 展开列 B
exploded_df = df.explode('B')
# 输出构造的数据和展开后的结果
print("原始数据:")
print(df)
print("\n展开后的数据:")
print(exploded_df)
输出:
原始数据:
A B
0 1 [4, 5]
1 2 [6]
2 3 [7, 8, 9]
展开后的数据:
A B
0 1 4
0 1 5
1 2 6
2 3 7
2 3 8
2 3 9
在这个例子中,explode('B')
将列 B
中的列表元素展开成单独的行。
假设 DataFrame 中包含元组,我们希望将元组中的元素展开为行,并重新生成索引。
import pandas as pd
# 构造示例数据
data = {
'X': ['a', 'b', 'c'],
'Y': [(1, 2), (3,), (4, 5, 6)]
}
df = pd.DataFrame(data)
# 使用 explode 展开列 Y,并忽略原索引
exploded_df = df.explode('Y', ignore_index=True)
# 输出构造的数据和展开后的结果
print("原始数据:")
print(df)
print("\n展开后的数据:")
print(exploded_df)
输出:
原始数据:
X Y
0 a (1, 2)
1 b (3,)
2 c (4, 5, 6)
展开后的数据:
X Y
0 a 1
1 a 2
2 b 3
3 c 4
4 c 5
5 c 6
在这个例子中,explode('Y', ignore_index=True)
将列 Y
中的元组元素展开成单独的行,并重置了索引。
更新时间:2024-09-20 17:10:15 标签:pandas python explode 爆炸