pandas使用df.explode()无法拆分列值,如何同时展开多列?
错误原因说明
- 错误尝试1报错原因:你当前
second列的元素类型本身就是列表,并非逗号分隔的字符串,.str是pandas提供的字符串列专属访问器,用在非字符串类型的列上就会触发AttributeError,你当前的数据集已经满足explode的输入要求,不需要额外做split操作。 - 错误尝试2报错原因:
list("firstsecond")会将拼接后的字符串逐字符拆分,生成['f','i','r','s','t','s','e','c','o','n','d']这种单字符列表,pandas找不到对应列名自然触发ValueError。你需要传入的是存储列名的列表['first', 'second'],而非拼接字符串。
正确实现方法
pandas 1.3.0及以上版本原生支持同时对多列执行explode操作,直接传入列名列表即可:
import pandas as pd # 原始数据构造代码 cols = ['name','first', 'second'] data = {'name':['image1','image2'], 'first':[['cv', 'pork'], ['pork', 'cv']], 'second':[[34,56],[67,89]]} df=pd.DataFrame(data) # 正确展开代码 df = df.explode(['first', 'second'])
执行后得到的输出结果如下:
| name | first | second | |
|---|---|---|---|
| 0 | image1 | cv | 34 |
| 0 | image1 | pork | 56 |
| 1 | image2 | pork | 67 |
| 1 | image2 | cv | 89 |
如果使用的是不支持多列explode的旧版本pandas,可以链式调用两次explode实现相同效果:
df = df.explode('first').explode('second')
注意:该操作要求
first和second列每行对应的列表长度完全一致,否则会出现数据错位或者报错。
内容的提问来源于stack exchange,提问作者sinG20
相关产品推荐
相关产品推荐

