首页 > 解决方案 > 如何在熊猫中拆分没有给定分隔符的字符串

问题描述

dfcolumn = [PUEF2CarmenXFc034DpEd, PUEF2BalulanFc034CamH, CARF1BalulanFc013Baca, ...] 

我的输出应该是:

dfnewcolumn1 = [PUEF2, PUEF2 , CARF1]
dfnewcolumn2 = [CarmenXFc034DpEd, BalulanFc034CamH, BalulanFc013Baca]

标签: pythonpandasdataframe

解决方案


假设您的拆分标准是固定数量的字符(例如这里的 5 个),您可以使用:

df['dfnewcolumn1'] = df['dfcolumn'].str[:5]
df['dfnewcolumn2'] = df['dfcolumn'].str[5:]

结果:

                dfcolumn dfnewcolumn1      dfnewcolumn2
0  PUEF2CarmenXFc034DpEd        PUEF2  CarmenXFc034DpEd
1  PUEF2BalulanFc034CamH        PUEF2  BalulanFc034CamH
2  CARF1BalulanFc013Baca        CARF1  BalulanFc013Baca

如果您的拆分标准是字符串中的第一个数字,您可以使用:

df[['dfnewcolumn1', 'dfnewcolumnX']] = df['dfcolumn'].str.split(r'(?<=\d)\D', n=1, expand=True)
df[['dfnewcolumnX', 'dfnewcolumn2']] = df['dfcolumn'].str.split(r'\D*\d', n=1, expand=True)
df = df.drop(columns='dfnewcolumnX')

使用以下修改后的原始数据和更多的测试用例:

                 dfcolumn
0   PUEF2CarmenXFc034DpEd
1   PUEF2BalulanFc034CamH
2   CARF1BalulanFc013Baca
3    CAF1BalulanFc013Baca
4  PUEFA2BalulanFc034CamH

运行代码:

df[['dfnewcolumn1', 'dfnewcolumnX']] = df['dfcolumn'].str.split(r'(?<=\d)\D', n=1, expand=True)
df[['dfnewcolumnX', 'dfnewcolumn2']] = df['dfcolumn'].str.split(r'\D*\d', n=1, expand=True)
df = df.drop(columns='dfnewcolumnX')

结果:

                 dfcolumn dfnewcolumn1      dfnewcolumn2
0   PUEF2CarmenXFc034DpEd        PUEF2  CarmenXFc034DpEd
1   PUEF2BalulanFc034CamH        PUEF2  BalulanFc034CamH
2   CARF1BalulanFc013Baca        CARF1  BalulanFc013Baca
3    CAF1BalulanFc013Baca         CAF1  BalulanFc013Baca
4  PUEFA2BalulanFc034CamH       PUEFA2  BalulanFc034CamH

推荐阅读