You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas实战:拆分含缺失元素的单列为三列

解决Pandas拆分含不同长度元素字符串的列对齐问题

先看原始数据(animals.csv):

Row,Animal
1,big green cat
2,small lizard
3,gigantic blue bunny

我们要把Animal列拆成Size、Color、Animal三列,最终期望结果:

Row,Size,Color,Animal
1,big,green,cat
2,small, ,lizard
3,gigantic,blue,bunny

直接用str.split('\s', expand=True)会导致两元素行的第三列为None,而非中间的Color列留空;指定列名时还会触发ValueError,因为列长度不匹配。下面给出两种实用的解决方法:


方法一:从右拆分先提取Animal,再处理前序部分

这个思路更贴合需求逻辑:先把每个字符串的最后一个词单独拆出来作为最终的Animal,剩下的部分再拆成Size和Color,没有颜色的行自动留空。

import pandas as pd

# 读取数据
df = pd.read_csv('animals.csv')

# 第一步:从右侧拆分1次,把最后一个词作为新的Animal列,前面的内容存到Temp列
df[['Temp', 'Animal']] = df['Animal'].str.rsplit('\s', maxsplit=1, expand=True)

# 第二步:拆分Temp列成Size和Color,缺失的Color用空字符串填充
df[['Size', 'Color']] = df['Temp'].str.split('\s', maxsplit=1, expand=True).fillna('')

# 清理临时列,调整列顺序
df = df.drop('Temp', axis=1)[['Row', 'Size', 'Color', 'Animal']]

# 查看结果
print(df.to_csv(index=False))

输出正好符合预期:

Row,Size,Color,Animal
1,big,green,cat
2,small,,lizard
3,gigantic,blue,bunny

方法二:拆分后通过条件判断分配列值

如果习惯从左到右拆分,可以先拆成最多3列,再通过条件判断把缺失的Color列补空,同时调整Animal列的取值:

import pandas as pd

df = pd.read_csv('animals.csv')

# 从左拆分,最多拆2次,得到3列
split_cols = df['Animal'].str.split('\s', maxsplit=2, expand=True)

# 分配Size列(第一部分)
df['Size'] = split_cols[0]
# 分配Color列:如果第三部分存在,就取第二部分;否则留空
df['Color'] = split_cols[1].where(split_cols[2].notna(), '')
# 分配Animal列:如果第三部分存在就取第三部分,否则取第二部分
df['Animal'] = split_cols[2].fillna(split_cols[1])

# 调整列顺序
df = df[['Row', 'Size', 'Color', 'Animal']]

print(df.to_csv(index=False))

这个方法同样能得到符合要求的结果。


内容的提问来源于stack exchange,提问作者Leia_Organa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:05:22