簡體   English   中英

通過正則表達式和匹配條件過濾 DataFrame

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM