Pandas使用split拆分列时如何将无逗号的字符串存入第二列
推荐解法(单行、矢量化运行效率高)
直接使用str.extract按规则匹配即可,完全符合你的需求:
df[['col1', 'col2']] = df['col'].str.extract(r'^(?:([^,]+),)?([^,]+)$')
- 匹配逻辑说明:
- 带逗号的字符串:逗号前内容存入
col1,逗号后内容存入col2 - 无逗号的字符串:
col1返回空值(pandas默认pd.NA/NaN),完整内容存入col2
如果需要col1显式存储None而非pandas默认空值,可以调整为:
- 带逗号的字符串:逗号前内容存入
df[['col1', 'col2']] = df['col'].str.extract(r'^(?:([^,]+),)?([^,]+)$').replace({pd.NA: None})
基于原有split写法的调整方案
如果你更习惯用split逻辑,也可以单行调整实现:
df[['col1', 'col2']] = df.col.str.split(',', expand=True).apply(lambda x: [None, x.iloc[0]] if x.iloc[1] is None else x, axis=1)
该方案可读性更高,但行级apply在数据量较大时运行效率低于正则提取方案。
内容的提问来源于stack exchange,提问作者Abu Ubaida
相关产品推荐
相关产品推荐

