python - 拆分字符串列并在 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_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
正则表达式 -^
用于字符串的开头,\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
andreplace
数字:
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
推荐阅读
- tensorflow - 带有 data_format channels_first 的 Conv1D 在 Keras 上产生错误
- rx-java2 - 如果在 RxJava/RxKotlin 中未找到所有条目,则检查列表并超时
- python - 如何在python中绘制重复堆积条形图?
- arrays - 如何在 Ionic 中获取嵌套 JSON 数组的值?
- python - 脚本中的 UTF8 不匹配
- angular - 如何手动触发事件并进行更改检测?
- c# - 使用带空格的 EPPlus 工作表名称导出到 Excel
- c - 通过调用函数在 C 中打印一系列数字的值
- android - Android Studio:JavaExec:找不到或加载主类
- lua - PBKDF2 Lua 实现问题