python - 在 Python 中按特定字符将一列分成两列
问题描述
我使用 Python3 并且需要拆分在数据框中price
混合在一起的列price_value
,price_unit
示例数据看起来像20dollar/m2/month
or 1.8dollar/m2/day
,我想按单词将它们拆分为这种格式dollar
:
price_value price_unit
20 dollar/m2/month
1.8 dollar/m2/day
我尝试过使用以下代码:
选项1:
df['price_value'] = df['price'].apply(lambda row: row.split('dollar')[0])
df['price_unit'] = df['price'].apply(lambda row: row.split('dollar')[-1])
选项 2:
df['price_value'], df['price_unit'] = df1["price"].str.split('dollar', 1).str
但我得到:
price_value price_unit
20 /m2/month
1.8 /m2/day
如何正确拆分它们?谢谢。
解决方案
您可以使用str.extract
正r'(?P<price_value>.*?)(?P<price_unit>dollar.*)'
则表达式:
>>> import pandas as pd
>>> df = pd.DataFrame(data=['20dollar/m2/month', '1.8dollar/m2/day'], columns=['price'])
>>> df['price'].str.extract(r'(?P<price_value>.*?)(?P<price_unit>dollar.*)')
price_value price_unit
0 20 dollar/m2/month
1 1.8 dollar/m2/day
请参阅正则表达式演示。
细节
(?P<price_value>.*?)
- 组“price_value”:尽可能少的除换行符以外的任何 0+ 个字符(?P<price_unit>dollar.*)
- 组“price_unit”:dollar
以及尽可能多的除换行符以外的任何 0+ 字符。
我假设您在输入中没有任何换行符,但如果您碰巧有任何换行符,请在模式前添加内联 DOTALL 修饰符(?s)
:r'(?s)(?P<price_value>.*?)(?P<price_unit>dollar.*)'
要将新提取的列添加到现有数据框中,您还可以使用
df[['price_value', 'price_unit']] = df['price'].str.extract(r'(.*?)(dollar.*)')
在这里,命名捕获组不是必需的,因为您事先定义了列名。
推荐阅读
- php - 结果没有记录,但记录在数据库中可用
- flutter - 您如何为常量类创建飞镖父级
- python - 为什么python插入反转了第二个列表的内容?
- javascript - 表中的多个复选框值存储在数组中并将数组发送到烧瓶
- c++ - 我怎么知道在哪里可以找到我丢失的 h 文件?
- vue.js - 使用 webpack 构建时 CssSyntaxError Unknown Word 但开发服务器运行良好
- python - Python:当第一列并不总是相等时,抓取表/获取特定列
- php - laravel 链接 isForceDeleting() 事件(在观察者上)
- typo3 - 将根模板外包到 TYPO3 扩展中
- java - 理解计算幂集的递归流程