首页 > 解决方案 > 在 Python 中按特定字符将一列分成两列

问题描述

我使用 Python3 并且需要拆分在数据框中price混合在一起的列price_valueprice_unit示例数据看起来像20dollar/m2/monthor 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

如何正确拆分它们?谢谢。

标签: pythonregexpandas

解决方案


您可以使用str.extractr'(?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.*)')

在这里,命名捕获组不是必需的,因为您事先定义了列名。


推荐阅读