假设我有一个数据框,如下所示:
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_price
和price_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
第一个解决方案是使用extract
和replace
按数字:
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] 删除。
我来说两句