[英]Filter pandas dataframe by row with regex
我敢肯定可能有一個簡單的解決方案,但我對Python還是很陌生。 我有一個帶有字符串和NaN值的Pandas DataFrame
。 在此數據框中,我想搜索字符串的特殊部分。 這應該逐行完成,找到的字符串將被寫入與Dataframe具有相同行數的列表中(這意味着如果我要查找的部分字符串在該行中無法匹配,則列表中的條目應為'沒有')。
我試過: result.loc[result[0].str.contains("hello", na=False)]
但這只給我返回第一列包含hello字樣的行。
我正在考慮在每行中使用正則表達式進行for循環搜索:
row = df.iloc[0:100]
for item in row:
row_dict={}
hello = re.search(r"hello.*", item)
if hello is None:
hello = "NaN"
也許還有一種更簡單的方法? 謝謝!
出於測試目的,我將源DataFrame定義為:
df = pd.DataFrame(data=[
['Halo Mike', 'How are you?', np.nan],
['Hello John', 'Good morning', 'What a nice day'],
['Ello Jack', 'Xyz hello abc', np.nan]])
如您所見,有2個元素包含hello和2個NaN元素。 列名在這里不是必需的,因此我沒有定義它們。
第一步是將此DataFrame轉換為Series ,並過濾掉NaN值:
ser = pd.Series(data=df.values.flatten()).dropna()
df.values
獲取基礎的Numpy數組, flatten
將其dropna
為一維數組, dropna
刪除NaN值。
然后,要獲取內部帶有hello
的本系列元素(不區分大小寫),請運行:
ser[ser.str.contains('hello', case=False)].tolist()
對於我們的測試數據,結果為:
['Hello John', 'Xyz hello abc']
我認為,這正是您在評論中所描述的。
對於實際輸入數據(比我的示例更長),如果要將搜索限制為僅100個初始行, df.values
df.head(100).values
更改為df.head(100).values
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.