Pandas拆分字符串列到指定命名列时缺失值导致错位如何解决?
问题原因
- 你原来的实现思路存在问题:
str.split(expand=True)是按拆分后元素的顺序返回列,和你指定的列名没有内容匹配关系,拆分后的第一个元素不管是什么都会赋值给第一个目标列blue,第二个元素赋值给red,以此类推,自然会出现错位。 - 空字符串拆分后得到的第一个元素是空白值,所以索引5的
blue列会填充空白而非None。
修复方案
可以直接用pandas内置的独热编码方法实现内容到列名的匹配,代码如下:
import pandas as pd # 原数据 df = pd.DataFrame({ 'string': ['blue', 'blue,red', 'red', 'purple', 'blue,red,green,yellow,magenta,purple', '', 'yellow,purple']}) # 定义目标颜色列顺序 target_colors = ['blue', 'red', 'green', 'yellow', 'magenta', 'purple'] # 生成独热编码后和列名相乘,匹配到的内容返回对应颜色名,未匹配返回空值,再替换空值为None color_df = df['string'].str.get_dummies(sep=',').mul(target_colors).replace('', None) # 按指定顺序赋值到原df df[target_colors] = color_df[target_colors]
运行结果
最终得到的df符合预期:
| string | blue | red | green | yellow | magenta | purple |
|---|---|---|---|---|---|---|
| blue | blue | None | None | None | None | None |
| blue,red | blue | red | None | None | None | None |
| red | None | red | None | None | None | None |
| purple | None | None | None | None | None | purple |
| blue,red,green,yellow,magenta,purple | blue | red | green | yellow | magenta | purple |
| None | None | None | None | None | None | |
| yellow,purple | None | None | None | yellow | None | purple |
内容的提问来源于stack exchange,提问作者johnjohn
相关产品推荐
相关产品推荐

