拆分字符串列并在Python中提取第二部分

阿邦

假设我有一个数据框,如下所示:

df = pd.DataFrame({"id": range(4), "price": ["15dollar/m2/day", "90dollar/m2/month", "18dollar/m2/day", "100dollar/m2/month"]})

       id               price
    0   0     15dollar/m2/day
    1   1   90dollar/m2/month
    2   2     18dollar/m2/day
    3   3  100dollar/m2/month

我想将列price分为两个新列:unit_priceprice_unit如下:

   id     unit_price  price_unit
0   0        15.0    dollar/m2/day
1   1        90.0    dollar/m2/month
2   2        18.0    dollar/m2/day
3   3       100.0    dollar/m2/month

这是我的解决方案:

df['unit_price'] = df['price'].str.split('dollar').str[0].astype(float)
#df['unit_price'] = df['price'].str.extract('(\d*\.\d+|\d+)', expand=False).astype(float)
df['price_unit'] = df['price'].str.split('dollar').str[1]
del df['price']

对于column unit_price,它工作正常,但是对于price_unit,当我除以时dollar,得到如下结果,该结果不包含character dollar,或者如果使用df['price'].str.replace(r'\d', ''),则所有数字均被删除。如何在Python中正确执行?谢谢。

df['price_unit']
Out[474]: 
0      /m2/day
1    /m2/month
2      /m2/day
3    /m2/month
Name: price_unit, dtype: object 
耶斯列尔

您可以Series.str.extract与regex一起使用-^用于字符串的开头,\d*\.\d+浮点数或\d+整数,然后用于所有其他值,方法是.*

df = df.join(df.pop('price').str.extract('(?P<unit_price>^\d*\.\d+|^\d+)(?P<price_unit>.*)'))
print (df)
   id unit_price       price_unit
0   0         15    dollar/m2/day
1   1         90  dollar/m2/month
2   2         18    dollar/m2/day
3   3        100  dollar/m2/month

第一个解决方案是使用extractreplace按数字:

pat = '(^\d*\.\d+|^\d+)'
df['unit_price'] = df['price'].str.extract(pat, expand=False)
df['price_unit'] = df.pop('price').str.replace(pat,'')
print (df)
   id unit_price       price_unit
0   0         15    dollar/m2/day
1   1         90  dollar/m2/month
2   2         18    dollar/m2/day
3   3        100  dollar/m2/month

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

提取字符串的第二部分

如何拆分字符串并删除重复并连接字符串的第二部分

将行的第一部分与固定字符串匹配,并在第二部分中计算唯一值

如何从C#中的字符串获取第二部分

如何用冒号突出显示搜索字符串的第二部分?

我仅获得字符串解析XML的第二部分

从多个令牌的字符串构建pyparsing.Dict-第二部分

如何仅将字符串的第二部分存储在列表中?

使用 split() 删除字符串的第二部分

在PostgreSQL中搜索子字符串(第二部分)

如何在给定模式上拆分字符串,同时将模式包含到拆分字符串的第二部分

将整数转换为字符串,在小数点处拆分,然后在数组的第二部分中包含小数点?

c#中的子字符串查找字符串中的第二部分

无法使用Excel公式获得大字符串的倒数第二部分

循環到名稱第二部分具有相同字符串的文件中

Grep仅占空间的第二部分

bash命令第二部分失败

将字符串分为两部分:第一部分是标题,第二部分是使用php的章节

通过调用第一部分提取索引第二部分

MySQL比较字符串的第一部分和第二部分是否相同

如何成功地针对性指定span标签中的字符串的第二部分

Universe字典ITem多部分密钥,第二部分是多值

提取R中url的最后一部分和倒数第二部分

由于列表范围中的第二部分,如何提取元组的第一部分

在逗号分隔的字符串中,保留除第二部分外的所有内容

Python:打印语句在第二部分中找不到值,打印方法是否绑定?

在侦听器中创建(某个类的)对象(第二部分)

在事务第二部分中的Save(List <S>)与save(Entity)

在 matplotlib 中更改条形图第二部分的值