将最后一个索引分隔到另一列中

Separating last indexes into another column

提问人:Allison Chaney 提问时间:11/10/2023 更新时间:11/10/2023 访问量:100

问:

我在商店里有以下关于薯片的数据集

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)

我一直收到错误“列必须与键的长度相同”。 有人告诉我我做错了什么,或者用另一种方式来减轻体重?

Python Pandas 正则表达式 索引

评论


答:

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