2024-05-23 20:02:03 发布
网友
我在(第1列)中有一些文本数据,我想知道是否可以从该列的行中提取一个特定的序列,并将它们添加到一个新的列中
例如:
(column1) Coke Can 300ml Bottle 800ml Cup Bucket 2000ml
变成:
(column1) (column2) Coke Can 300ml Bottle 800ml Cup N/A Bucket 20000ml
基本上,我想提取每个带有“xxml”的短语,并将其插入到一个新的列中。谢谢你的帮助
使用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 |
使用pandasstr extract搜索后跟“ml”的数字
如果要删除数字后面的“ml”,可以使用regex look-behind断言。。。它将只在数字后查找“ml”,并将其替换为空字符串
你可能想试试这个
使用pandas.extractall提取到各个列中
相关问题 更多 >
编程相关推荐