如何将DataFrame列中字符串按固定长度拆分并扩展为多行?
解决DataFrame按固定长度拆分字符串并扩展行的问题
可以用两种简洁的方法实现需求,无需复杂操作:
方法一:列表推导式切片拆分
直接对Pay Grade列的每个字符串按每2个字符切片,空字符串单独保留,再用explode()扩展成行:
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'Employee': ['John', 'Kathy', 'Tom'], 'Pay Grade': ['7A5B', '', '9A9B4C'] }) # 拆分字符串:每2个字符一组,空值保留为[''] df['Pay Grade'] = df['Pay Grade'].apply( lambda x: [x[i:i+2] for i in range(0, len(x), 2)] if x else [''] ) # 扩展为多行 df = df.explode('Pay Grade').reset_index(drop=True) print(df)
方法二:正则匹配+extractall
利用正则表达式匹配每两位字符,通过extractall()提取所有匹配项,再合并回原表:
import pandas as pd df = pd.DataFrame({ 'Employee': ['John', 'Kathy', 'Tom'], 'Pay Grade': ['7A5B', '', '9A9B4C'] }) # 提取每两位字符,生成多行结果 extracted = df['Pay Grade'].str.extractall(r'([A-Z0-9]{2})').reset_index(level=1, drop=True) # 关联原表并填充空值 result = df.join(extracted).rename(columns={0: 'Split_Pay'}) result['Pay Grade'] = result['Split_Pay'].fillna(result['Pay Grade']) # 清理多余列并重置索引 result = result.drop('Split_Pay', axis=1).reset_index(drop=True) print(result)
两种方法都能完美处理长度为0、2、4、6的字符串,输出结果与期望完全一致。
内容的提问来源于stack exchange,提问作者datagolfer
相关产品推荐
相关产品推荐

