如何将DataFrame列的每个字符拆分到独立列?解决np.asarray赋值错误
拆分DataFrame单词列为字符列(解决长度不一致报错问题)
问题描述
现有如下DataFrame:
import pandas as pd df = pd.DataFrame({'a': ['bear', 'fox', 'wolf', 'mouse']})
输出结构:
a 0 bear 1 fox 2 wolf 3 mouse
需要将a列的每个单词拆分为单个字符的多列,期望输出:
0 1 2 3 4 0 b e a r NaN 1 f o x NaN NaN 2 w o l f NaN 3 m o u s e
直接使用np.asarray会报错:ValueError: setting an array element with a sequence,原因是numpy数组要求所有元素长度一致,而各单词的字符数不同。
解决方案
方法1:使用apply结合pd.Series
将每个字符串转为字符列表,再转为Series,pandas会自动用NaN填充空缺位置:
# 拆分字符并转为DataFrame result = df['a'].apply(list).apply(pd.Series) print(result)
运行后即可得到目标输出。
方法2:使用str.split过滤空值
利用字符串的split方法拆分字符,再过滤拆分产生的首尾空字符串:
# 获取最长单词的长度 max_len = df['a'].str.len().max() # 拆分字符并展开为列,过滤空值列 result = df['a'].str.split('', expand=True).drop([0, max_len + 1], axis=1) print(result)
这种方法先拆分出所有字符(包括首尾空串),再删除多余的空值列,同样能得到目标结果。
报错原因说明
np.asarray要求输入的序列长度必须统一,但原数据中每个单词的字符数不同(3-5个),因此无法直接转为numpy数组。而pandas的DataFrame/Series支持不等长序列,会自动用缺失值(NaN)填充长度不足的部分,完美适配这种场景。
内容的提问来源于stack exchange,提问作者Marineil Gomez
相关产品推荐
相关产品推荐

