如何基于多个分隔符拆分pandas数据?

9

我有一个包含df列的内容

(这里的df指的是数据框)
Phone number
12399422/930201021
5451354;546325642
789888744,656313214
123456654

我想将它分成两栏。
Phone number1      Phone number2
12399422           930201021
5451354            546325642
789888744          656313214
123456654

我尝试使用apply方法,

    df['TELEPHONE1'] = df['TELEPHONE'].str.split(',').str.get(0)
    df['TELEPHONE2'] = df['TELEPHONE'].str.split(',').str.get(1)
    df['TELEPHONE1'] = df['TELEPHONE'].str.split(';').str.get(0)
    df['TELEPHONE2'] = df['TELEPHONE'].str.split(';').str.get(1)
    df['TELEPHONE1'] = df['TELEPHONE'].str.split('/').str.get(0)
    df['TELEPHONE2'] = df['TELEPHONE'].str.split('/').str.get(1)

但它只能分割“/”符号。谢谢你的帮助。

3个回答

16
使用 str.split
df.Phonenumber.str.split('/|;|,',expand=True).add_prefix('Number_')
    Number_0   Number_1
0   12399422  930201021
1    5451354  546325642
2  789888744  656313214
3  123456654       None

我正在使用这个 df[ColumnName].str.split('[,]',expand=True),但它没有识别到我有三个分隔符。它要么将每个单独的字符分开,要么只按逗号分开。 - PM0087

3

只需在\D(非数字)上拆分即可:

(df['Phone number'].str.split(r'\D', expand=True)
    .rename(columns=lambda x: f'num{x+1}'))

        num1       num2
0   12399422  930201021
1    5451354  546325642
2  789888744  656313214
3  123456654       None

在假设电话号码只包含数字的情况下。


或者,使用extractall并仅匹配数字:

df['Phone number'].str.extractall(r'(\d+)')[0].unstack()

match          0          1
0       12399422  930201021
1        5451354  546325642
2      789888744  656313214
3      123456654        NaN

1
df.Phonenumber.str.split('[\/\|\;\|\,]',expand=True).add_prefix('Number_')

这应该是正确的答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接