提问人:Allison Chaney 提问时间:11/10/2023 更新时间:11/10/2023 访问量:100
将最后一个索引分隔到另一列中
Separating last indexes into another column
问:
我在商店里有以下关于薯片的数据集
STORE_NBR | PROD_NAME |
---|---|
1000 | CNatural Chip Compny SeaSalt 海盐 175g |
1307 | Smiths 克皱切鸡片 170g |
并希望在自己的列中使我的筹码的重量以克为单位。这是超过 100,000 行的超大型数据集的示例。最初我用最后一个空格将其分开,但注意到重量在产品名称和重量之间并不总是有空格。
理想的输出是:
PROD_NAME | 重量 |
---|---|
CNatural Chip Compny SeaSalt | 175克 |
Smiths Crinkle Cut Chips 鸡肉 | 170克 |
原来的代码行是: df_transactions[['PROD_NAME', '权重']] = df_transactions['PROD_NAME'].str.rsplit(“ ”, n=1, expand=True)
所以我把它更新为: df_transactions[['PROD_NAME','Size']] = df_transactions['PROD_NAME'].str.rsplit(“\d{3}g”, n=1, expand=True)
我一直收到错误“列必须与键的长度相同”。 有人告诉我我做错了什么,或者用另一种方式来减轻体重?
答:
0赞
mozway
11/10/2023
#1
使用 str.extract
:
out = df['PROD_NAME'].str.extract(r'^(?P<PROD_NAME>.*?)\s*(?P<Weight>\d+g)$')
输出:
PROD_NAME Weight
0 CNatural Chip Compny SeaSalt 175g
1 Smiths Crinkle Cut Chips Chicken 170g
正则表达式
^ # match start of string
(?P<PROD_NAME>.*?) # capture everything (non greedy)
\s* # optional spaces
(?P<Weight>\d+g) # capture digits followed by "g"
$ # match end of string
-1赞
Panda Kim
11/10/2023
#2
法典
改用 rsplit 并修复您的正则表达式模式str.split
pat = '\s*(?=\d+g$)'
df_transactions[['PROD_NAME','Size']] = df_transactions['PROD_NAME'].str.split(pat, n=1, expand=True)
df_transactions:
STORE_NBR PROD_NAME Size
0 1000 CNatural Chip Compny SeaSalt 175g
1 1307 Smiths Crinkle Cut Chips Chicken 170g
评论