python-3.x - 仅从带有附加文本 ml,kg,l 的文本中提取数字
问题描述
我只想从我的 DataFrame 列中提取具有 kg、ml、l 或 kg 的数字。我需要创建一个新列并从每一行中仅提取具有 ml、l、kg 或千克的数字。
例子:
data = [[1, 'detergent 5kg , 555667 ch'], [2, '009 ph, cream 10 ml'], [3, 'oliv oil 0.5 l bio, serial number 34455555'], [4, 'dddd 45, 2 kilograms eco corn flour serial number 7788696']]
df = pd.DataFrame(data, columns = ['id', 'text'])
我知道我可以用它来提取数字:
df['new_col'] = df.text.str.extract('(\d+)')
但我想在一个新列中输出只有公斤、毫升或升(公斤、毫升、升)的数字。像这样的东西:
5kg
10 ml
0.5 l
2 kilograms
解决方案
快到了,试试:
df['new_col'] = df.text.str.extract(r'(\d+[.]{0,1}\d*\s*(kg|ml|l|kilograms))')[0]
输出:
id ... new_col
0 1 ... 5kg
1 2 ... 10 ml
2 3 ... 0.5 l
3 4 ... 2 kilograms
编辑
根据后续行动-extract
仅提取第一个匹配项-如果您想要所有匹配项-请尝试:
输入:
data = [[1, '10mldetergent 5kg , 555667 ch'], [2, '009 ph, cream 10 ml'], [3, 'oliv oil 0.5 l bio, serial number 34455555'], [4, 'dddd 45, 2 kilograms eco corn flour serial number 7788696']]
df = pd.DataFrame(data, columns = ['id', 'text'])
df['new_col'] = df.text.str.extractall(r'(\d+[.]{0,1}\d*\s*(kg|ml|l|kilograms))')[0].groupby(level=[0]).agg(list)
输出:
id ... new_col
0 1 ... [10ml, 5kg]
1 2 ... [10 ml]
2 3 ... [0.5 l]
3 4 ... [2 kilograms]
推荐阅读
- azure - 在生产环境中使用不同的连接字符串
- php - 多个文件上传中的文件重命名索引不会增加
- oracle - 如何将行附加到现有的 SYS_REFCURSOR?
- java - 错误 E/RecyclerView:未连接适配器;设置firebase recyclerview android studio时跳过布局
- python - Pandas 均值条形图聚合所有项目
- javascript - 获取返回 null 的图像尺寸
- c# - 将 Img 重新加载到 memorystream 会导致 [A generic error occurred in GDI+]
- flutter - 有没有办法在颤振中创建类似于电报的登机屏幕?
- xamarin.forms - 本地通知未在 Android 10 中触发
- windows - Powershell Set-Content 空文件出错