转换 - df.explode("要拆的列") - 字段是list转多行
explode 简介
Pandas 的 explode 函数是用来将一个 DataFrame 中的某个列表或字典类型的列分解(或展开)成多行。这通常用于将列中的每个元素转换为 DataFrame 的一行,从而简化数据处理和分析。
爆炸(Explode)操作的典型应用场景:
当列中包含列表或字典,并且你想要将这些列表或字典中的每个元素转换为 DataFrame 的一行。
在数据预处理阶段,用于将嵌套的数据结构展平成表格形式。
数据
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[{"A":"one", "B":"1, 2"}, {"A":"two", "B":"3, 4"}])
|
A |
B |
0 |
one |
1, 2 |
1 |
two |
3, 4 |
整理
df["B"] = df["B"].str.split(",")
|
A |
B |
0 |
one |
[1, 2] |
1 |
two |
[3, 4] |
df["B"] = df["B"].map(eval) # 类型是Object(字符串)要转成list
df.explode(“要拆的列”)
df = df.explode("B")
## 会自动和其它字段进行笛卡尔积, 也就是自动匹配
|
A |
B |
0 |
one |
1 |
0 |
one |
2 |
1 |
two |
3 |
1 |
two |
4 |
## 重置索引
df1 = df.reset_index(drop=True)
|
A |
B |
0 |
one |
1 |
1 |
one |
2 |
2 |
two |
3 |
3 |
two |
4 |

旧版方法
data = data.set_index(['其余的列', '其余的列'])['B'].apply(pd.Series).stack().reset_index()