[英]Update dataframe values that match a regex condition and keep remaining values intact
[英]Filter DataFrame by regex and match condition
我有以下 DataFrame:
周期性 | 回答 |
---|---|
米 | 是的 |
米 | 是的 |
是 | 是的 |
米 | 不 |
是 | 不 |
米 | 不 |
我需要過濾 DataFrame 以獲取具有每月 (M) 周期並具有肯定(是、是、是、是等)答案的行。
我嘗試使用以下代碼對其進行過濾:
import pandas as pd
import re
data = {'Periodicity': ['M', 'Y', 'M', 'M', 'M', 'Y', 'M', 'M'],
'Answer': ['YES', 'Yes', 'YEs', 'NO', 'no', 'No', 'yeS', 'yeS']}
df = pd.DataFrame(data)
pat=r'^[Yy].*'
df_filter=df[df.Answer.str.contains(pat)]
但我不知道如何添加另一個條件來過濾 DataFrame 以匹配所需的周期性。 每次我添加另一個過濾條件時,都會收到以下錯誤消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all
()。
嘗試這個:
df_filter=df[df.Answer.str.contains(pat) & df.Periodicity.str.contains('M')]
您可以在沒有正則表達式的情況下執行此操作(通過使用 string lower
方法和 dataframe 過濾:
import pandas as pd
import re
data = {'Periodicity': ['M', 'Y', 'M', 'M', 'M', 'Y', 'M', 'M'],
'Answer': ['YES', 'Yes', 'YEs', 'NO', 'no', 'No', 'yeS', 'yeS']}
df = pd.DataFrame(data)
df = df[(df['Answer'].str.lower() == 'yes') & (df['Periodicity'] == 'M')] # do this
print(df)
output:
Periodicity Answer
0 M YES
2 M YEs
6 M yeS
7 M yeS
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.