我有一個帶有一列串列的 Pandas 資料框,我正在嘗試根據另一個串列串列將其過濾掉。
id path
101 ['Activities (DEV)', 'public', '_yoyo_log']
102 ['Activities (DEV)', 'public', 'behavior_trackers']
103 ['Activities (DEV)', 'public', 'journal_entries']
104 ['Social (PROD)', 'public', 'starva_activity']
105 ['pg-prd (DEV-RR)', 'public', 'activities']
106 ['pg-prd (DEV-RR)', 'public', 'blackouts']
和串列串列
slist = [['activities (dev)', 'public', 'behavior_trackers'],
['activities (dev)', 'public', 'journal_entries'],
['pg-prd (dev-rr)', 'public', 'activities']]
我想做的是根據串列值過濾掉熊貓資料框。這是我嘗試過的:
df = df[df['path'].apply(lambda x: eval(str(x).lower())).isin(slist)]
這種方法有時會奏效,而大多數時候它會拋出一個錯誤說
TypeError: unhashable type: 'list'
我希望我的輸出像
id path
102 ['Activities (DEV)', 'public', 'behavior_trackers']
103 ['Activities (DEV)', 'public', 'journal_entries']
105 ['pg-prd (DEV-RR)', 'public', 'activities']
有沒有更好的方法來做到這一點,或者我錯過了什么?我正在使用 pyenv 3.6.2
uj5u.com熱心網友回復:
使用元組過濾 - 列并將串列轉換為元組:
t = [tuple(x) for x in slist]
df = df[df['path'].apply(lambda x: tuple(eval(str(x).lower()))).isin(t)]
或者:
df = df[df['path'].apply(lambda x: tuple([y.lower() for y in x])).isin(t)]
print (df)
id path
1 102 [Activities (DEV), public, behavior_trackers]
2 103 [Activities (DEV), public, journal_entries]
4 105 [pg-prd (DEV-RR), public, activities]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311457.html
上一篇:如何轉換這個dict輸出?
