按分隔符拆分 Pandas 中的列值而不丢失分隔符
Splitting Columns' Values in Pandas by delimiter without losing 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" 字符拆分 "Info" 列的值。本质上,我想创建两个新列,如下面的数据框所示:
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 的列中,'Package',我只得到 "Apples 20" 而不是 "Apples 20pk"。
我想使用“”字符(space)进行拆分,但是我得到了三个值('Apples'、'20pk'、'ABC123')。
因为有 n 行(不仅仅是 3 行),我想知道最有效的方法是什么?谢谢!
你可以在之后将 pk 附加到该列吗?
我们可以在这里使用正则表达式进行正向回顾。在本例中,我们拆分了一个空格 (\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
嗨,我有一个遵循这种格式的数据框:
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" 字符拆分 "Info" 列的值。本质上,我想创建两个新列,如下面的数据框所示:
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 的列中,'Package',我只得到 "Apples 20" 而不是 "Apples 20pk"。
我想使用“”字符(space)进行拆分,但是我得到了三个值('Apples'、'20pk'、'ABC123')。
因为有 n 行(不仅仅是 3 行),我想知道最有效的方法是什么?谢谢!
你可以在之后将 pk 附加到该列吗?
我们可以在这里使用正则表达式进行正向回顾。在本例中,我们拆分了一个空格 (\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