我在(第1列)中有一些文本数据,想知道是否可以从该列中的行中提取特定序列并将其添加到新列中。
例如:
(column1)
Coke Can 300ml
Bottle 800ml
Cup
Bucket 2000ml
变成:
(column1) (column2)
Coke Can 300ml
Bottle 800ml
Cup N/A
Bucket 20000ml
基本上,我想用“ xxml”提取每个短语并将其插入到新列中。谢谢您的帮助!
答案 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得到的答案似乎最好,我只是将其放在此处,因为它可能很有趣。