通过定界符在Pandas中拆分列的值而不会丢失定界符

时间:2019-07-09 22:43:20

标签: python pandas split delimiter

嗨,我有一个遵循以下格式的数据框:

df = pd.DataFrame(np.array([[1, 2, 'Apples 20pk ABC123', 4, 5], [6, 7, 
'Oranges 40pk XYZ123', 9, 0], [5, 6, 'Bananas 20pk ABC123', 8, 9]]), columns=
               ['Serial #', 'Branch ID', 'Info', 'Value1', 'Value2'])

         Serial#  Branch ID    Info                  Value1   Value2
  0         1       2          Apples 20pk ABC123       4        5
  1         6       7          Bananas 20pk ABC123      9        0
  2         5       6          Oranges 40pk XYZ123      8        9

我想基于“ pk”字符拆分“信息”列的值。本质上,我想创建两个新列,如下面的数据框所示:

         Serial#  Branch ID    Package        Branch   Value1   Value2
  0         1       2          Apples 20pk    ABC123      4        5
  1         6       7          Bananas 20pk   ABC123      9        0
  2         5       6          Oranges 40pk   XYZ123      8        9

我尝试使用:

info = df["Info"].str.split("pk ", n=1, expand=True)
df['Package'] = branch[0]
df['Branch'] = branch[1]
del df['Info']

但是结果是,在df的“包装”列中,我只得到“ Apples 20”,而不是“ Apples 20pk”。

我想使用“”字符(一个空格)进行分割,但是我得到了三个值('Apples','20pk','ABC123')。

因为有n行(而不是3行),所以我想知道最有效的方法是什么?谢谢!

2 个答案:

答案 0 :(得分:1)

我们可以在此处使用正则表达式。在这种情况下,我们在一个空格(\s)上分割,该空格前面(?<=)的字符串为pk

df['Info'].str.split('(?<=pk)\s', expand=True)
              0       1
0   Apples 20pk  ABC123
1  Oranges 40pk  XYZ123
2  Bananas 20pk  ABC123

为了获得您期望的输出,我们一次性创建了两列,然后放下Info

df[['Package', 'Branch']] = df['Info'].str.split('(?<=pk)\s', expand=True)

df.drop('Info', axis=1, inplace=True)
  Serial # Branch ID Value1 Value2       Package  Branch
0        1         2      4      5   Apples 20pk  ABC123
1        6         7      9      0  Oranges 40pk  XYZ123
2        5         6      8      9  Bananas 20pk  ABC123

答案 1 :(得分:0)

之后您可以将pk附加到该列吗?