原始資料框:
| 日期 | 細節 |
|---|---|
| 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 |
uj5u.com熱心網友回復:
您應該能夠使用以下形式的正則運算式模式:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455790.html
標籤:python-3.x 正则表达式 熊猫 数据框
