Pandas从一列中提取短语并将其添加到新列中

2024-05-23 20:02:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在(第1列)中有一些文本数据,我想知道是否可以从该列的行中提取一个特定的序列,并将它们添加到一个新的列中

例如:

  (column1)
Coke Can 300ml
Bottle 800ml
Cup
Bucket 2000ml

变成:

(column1)          (column2)
 Coke Can            300ml
 Bottle              800ml
 Cup                 N/A
 Bucket              20000ml

基本上,我想提取每个带有“xxml”的短语,并将其插入到一个新的列中。谢谢你的帮助


Tags: 数据文本bottlebucket序列cancupcolumn1
3条回答

使用pandasstr extract搜索后跟“ml”的数字

  df['(column2)'] = df.iloc[:,0].str.extract(r'(\d+ml)')

    (column1)      (column2)
0   Coke Can 300ml  300ml
1   Bottle 800ml    800ml
2   Cup             NaN
3   Bucket 2000ml   2000ml

如果要删除数字后面的“ml”,可以使用regex look-behind断言。。。它将只在数字后查找“ml”,并将其替换为空字符串

df.iloc[:,0] = df.iloc[:,0].str.replace('(?<=\d)ml','')

    (column1)   (column2)
0   Coke Can 300    300ml
1   Bottle 800      800ml
2   Cup             NaN
3   Bucket 2000     2000ml

你可能想试试这个

df['new_column'] = df['column'].apply(lambda x: x.split()[-1] if len(x.split()) > 1 else None) 

使用pandas.extractall提取到各个列中

import pandas as pd
df = pd.DataFrame(dict(
    col1 = ['Coke Can 300ml', 'Bottle 800ml', 'Cup', 'Bucket 2000ml']))
print(df.to_markdown())
|    | col1           |
|---:|:---------------|
|  0 | Coke Can 300ml |
|  1 | Bottle 800ml   |
|  2 | Cup            |
|  3 | Bucket 2000ml  |

import re
df=df['col1'].str.extractall('([a-z ]+)(\d+)?([a-z]+)?',flags=re.I)
print(df.to_markdown())

|        | 0        |    1 | 2   |
|:-------|:---------|-----:|:----|
| (0, 0) | Coke Can |  300 | ml  |
| (1, 0) | Bottle   |  800 | ml  |
| (2, 0) | Cup      |  nan | nan |
| (3, 0) | Bucket   | 2000 | ml  |

相关问题 更多 >