原始数据框:
日期 | 细节 |
---|---|
22 年 3 月 31 日 | 我和家人在家看 Netflix 4 小时 |
22 年 1 月 4 日 | 我步行到市场3公里,花了11.54美元 |
02/04/22 | 我的狗咬我,我去医院,花了 29.99 美元 |
22 年 3 月 4 日 | 我在 Steam 上买了一个游戏 7 游戏花了 19.23 美元 |
结果数据框:
日期 | 细节 | 成本 |
---|---|---|
22 年 3 月 31 日 | 我和家人在家看 Netflix 4 小时 | 0 |
22 年 1 月 4 日 | 我步行到市场3公里,花了11.54美元 | 11.54 |
02/04/22 | 我的狗咬我,我去医院,花了 29.99 美元 | 29.99 |
22 年 3 月 4 日 | 我在 Steam 上买了一个游戏 7 游戏花了 19.23 美元 | 19.23 |
描述我的问题:
如果详细信息列不包含以 sp.. 开头并以美元结尾的特定字符串,则Cost col中的值为零。
如果详细信息列确实包含以 sp.. 开头并以美元结尾的特定字符串,则Cost col中的值等于特定字符串中间的值,该字符串以 sp.. 开头并以美元结尾。
我尝试使用正则表达式,但它的第一个 int 包含在 col 中
| 22 年 1 月 4 日 | 我步行3公里到市场花了11.54美元| 3 |
您应该能够使用以下形式的正则表达式模式:
df['Cost'] = df['Detail'].str.extract(r'sp\D*([\d\.]*)\D*dollar')
这将查找文字字符串sp
,然后查找其后的任何非数字字符。捕获组(由 表示()
)查找代表美元金额的任何数字或句点字符。这是返回到Cost
列的内容。模式的最后一部分允许在美元金额之后使用任意数量的非数字字符,然后是文字字符串dollar
。
pd.NA
然后可以将没有成本的for 行替换为0
:
df['Cost'] = df['Cost'].replace({pd.NA: 0})
如果您想进行任何增强,我使用此站点来测试正则表达式:https ://regexr.com/6ir6o
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句