熊猫-从一列中提取一个短语并将其添加到新列中

时间:2020-03-25 02:43:32

标签: python pandas

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

例如:

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

变成:

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

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

4 个答案:

答案 0 :(得分:2)

使用熊猫str extract搜索后跟“ ml”的数字

GeoJSON.Polygon

如果要删除数字后的'ml',可以在断言后使用regex look……它只会在数字后寻找'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

答案 1 :(得分:1)

使用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  |

答案 2 :(得分:0)

您可能想尝试一下。

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

答案 3 :(得分:0)

给出

df = pd.DataFrame(dict(
    col1 = ['Coke Can 300ml', 'Bottle 800ml', 'Cup', 'Bucket 2000ml'])
)

以下可能是您想要的:

In [13]: df.col1.str.split(' ', expand=True, n = 1)
Out[13]:
        0          1
0    Coke  Can 300ml
1  Bottle      800ml
2     Cup       None
3  Bucket     2000ml

但是,这是在列值右侧的第一个空白处分割的。

为此,您从@sammywemmy得到的答案似乎最好,我只是将其放在此处,因为它可能很有趣。