第一次出现“-”时拆分列

时间:2018-08-15 17:46:39

标签: python pandas

我有一个熊猫数据框,其中的列包含门牌号和后缀。门牌号和后缀以“-”分隔,尽管许多后缀也包含“-”。

我已经尝试过了:

df house_nr(x):
    y = x['house_nr'].split('-', maxsplit = 1)
    return y

df['suffix'] = df.apply(house_nr, axis=1)

收到以下错误:

KeyError: ('house_nr', 'occurred at index 0')

经过一些其他尝试,我可以正常工作了:

df2 = pd.DataFrame(df['house_nr'].str.split('-',1).tolist(),columns = ['house-number','suffix'])

然后我加入了数据框,但我认为这种解决方案不是很好的方法或pythonic。

3 个答案:

答案 0 :(得分:2)

设置

df = pd.DataFrame({'house_nr': ['123-Rd-thing', '456-House', '567-House-thing']})

          house_nr
0     123-Rd-thing
1        456-House
2  567-House-thing

使用列表推导和split,它将比pandas字符串方法快:

pd.DataFrame([i.split('-', 1) for i in df.house_nr], columns=['num', 'suffix'])

   num       suffix
0  123     Rd-thing
1  456        House
2  567  House-thing

答案 1 :(得分:2)

使用Numpy的defchararray模块

from numpy.core.defchararray import split

a = df.house_nr.values.astype(str)
pd.DataFrame(
    split(a, '-', 1).tolist(),
    df.index, ['house-number', 'suffix'])

  house-number       suffix
0          123     Rd-thing
1          456        House
2          567  House-thing

具有不同结构的相同想法

from numpy.core.defchararray import split

cols = ['house-number', 'suffix']
a = df.house_nr.values.astype(str)
pd.DataFrame(dict(zip(cols, zip(*(split(a, '-', 1))))), df.index)

  house-number       suffix
0          123     Rd-thing
1          456        House
2          567  House-thing

从@ user3483203借来的设置

(我将还给我)

df = pd.DataFrame({'house_nr': ['123-Rd-thing', '456-House', '567-House-thing']})

答案 2 :(得分:1)

expand=True使用n=1str.split参数。 expand=True为拆分创建新列,n=1将拆分限制为第一次出现-

>>> df
          col
0  5-suffix-1
1  6-suffix-2

df[['house_number','suffix']] = df['col'].str.split('-', n=1, expand=True)

>>> df
          col house_number    suffix
0  5-suffix-1            5  suffix-1
1  6-suffix-2            6  suffix-2