使用.str.split(expand=True)为何丢失数据?如何解决?
问题原因与解决方法
原因分析
str.split("")的拆分逻辑会生成空字符串:当传入空字符串作为分隔符时,Python会在每个字符的前后进行分割,比如"ATTGG"会被拆分为["", "A", "T", "T", "G", "G"],开头的空串会占据拆分结果的第一列。- 你误以为“首行丢失”是混淆了DataFrame的索引与数据:输出左侧的数字是行索引,顶部的数字是列索引,原数据的每一行都被拆分了,但拆分结果的第一列全是空字符串,让你产生了首行数据丢失的错觉。
解决方法
方法1:过滤拆分后的空列
拆分后直接删除开头和结尾的空字符串列(因每个字符串长度一致,结尾也会有空串):
# 已知字符串长度为5时,直接删除索引0和5的列 newdf = df['col'].str.split("", expand=True).drop([0, 5], axis=1) # 动态适配任意长度的字符串 str_len = len(df['col'].iloc[0]) newdf = df['col'].str.split("", expand=True).drop([0, str_len], axis=1)
方法2:直接提取每个字符(更高效)
用str.extractall精准提取每个字符,再转换为宽表,从根源避免空串生成:
newdf = df['col'].str.extractall('(.)')[0].unstack()
方法3:将字符串转为字符列表
通过apply(list)把每个字符串转成字符列表,再直接构建DataFrame:
newdf = pd.DataFrame(df['col'].apply(list).tolist())
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

