如何拆分DataFrame列,将无分隔符的字符串值分配到第二列
问题原因
- 拆分用的分隔符是带前后空格的
" - ",和原数据中无空格的"-"不匹配,导致有分隔符的行也没有拆分成功 - 原生
str.split对无分隔符的行默认会将全部内容存入第一列,第二列为空,不符合需求
解决方案
方法1:拆分后调整数据
import pandas as pd # 按无空格的"-"拆分,最多拆分1次 split_res = df['COLUMN A'].str.split("-", n=1, expand=True) # 筛选出没有分隔符的行(第二列为空) no_sep_mask = split_res[1].isna() # 把无分隔符行的第一列内容移到第二列,第一列设为空 split_res.loc[no_sep_mask, 1] = split_res.loc[no_sep_mask, 0] split_res.loc[no_sep_mask, 0] = "" # 重命名列并合并回原表 split_res.columns = ["COLUMN B", "COLUMN C"] df = pd.concat([df, split_res], axis=1)
方法2:正则提取(更简洁)
直接用正则分组分别捕获编码和地区,一步得到符合要求的两列:
# 第一组捕获开头的数字加横杠,第二组捕获剩下的所有内容 df[['COLUMN B', 'COLUMN C']] = df['COLUMN A'].str.extract(r'^(\d+-)?(.*)$') # 去掉编码末尾的横杠,无编码的位置填充为空字符串 df['COLUMN B'] = df['COLUMN B'].str.rstrip('-').fillna('')
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

