0
可以說我有兩個單詞列表,其中有一個單詞跟在另一個單詞後面。他們通過空間或短劃線相連。爲簡單起見,他們將是相同的話:複合詞使用熊貓進行大型數據集檢測
First=['Derp','Foo','Bar','Python','Monte','Snake']
Second=['Derp','Foo','Bar','Python','Monte','Snake']
所以下面的話以下組合存在(由是表示):
Derp Foo Bar Python Monte Snake
Derp No No Yes Yes Yes Yes
Foo Yes No No Yes Yes Yes
Bar Yes Yes No Yes Yes Yes
Python No Yes Yes No Yes Yes
Monte No Yes Yes No No No
Snake Yes No Yes Yes Yes No
我已經設置這樣的,我是一個數據檢測特定的詞:
df=pd.DataFrame({'Name': [ 'Al Gore', 'Foo-Bar', 'Monte-Python', 'Python Snake', 'Python Anaconda', 'Python-Pandas', 'Derp Bar', 'Derp Python', 'JavaScript', 'Python Monte'],
'Class': ['Politician','L','H','L','L','H', 'H','L','L','Circus']})
如果我使用正則表達式,並標記所有從模式的數據會是這個樣子:
import pandas as pd
df=pd.DataFrame({'Name': [ 'Al Gore', 'Foo-Bar', 'Monte-Python', 'Python Snake', 'Python Anaconda', 'Python-Pandas', 'Derp Bar', 'Derp Python', 'JavaScript', 'Python Monte'],
'Class': ['Politician','L','H','L','L','H', 'H','L','L','Circus']})
df['status']=''
patterns=['^Derp(-|\s)(Foo|Bar|Snake)$', '^Foo(-|\s)(Bar|Python|Monte)$', '^Python(-|\s)(Derp|Foo|Bar|Snake)', '^Monte(-|\s)(Derp|Foo|Bar|Python|Snake)$']
for i in range(len(patterns)):
df.loc[df.Name.str.contains(patterns[i]),'status'] = 'Found'
print (df)
這裏是打印:
>>>
Class Name status
0 Politician Al Gore
1 L Foo-Bar Found
2 H Monte-Python Found
3 L Python Snake Found
4 L Python Anaconda
5 H Python-Pandas
6 H Derp Bar Found
7 L Derp Python
8 L JavaScript
9 Circus Python Monte
[10 rows x 3 columns]
對於更大的數據集似乎並不非常可行寫出所有的正則表達式模式。那麼有沒有辦法讓一個循環或某些東西通過組合矩陣中的模式來檢索存在的模式(在上表中表示爲yes)並跳過那些不存在的模式(在上表中表示爲否)?我知道在itertools
庫中有一個叫做combinations
的函數,它可以通過循環來生成所有可能的模式。
感謝您的答覆,以便爲這是你基本上做了:存儲表格做一個字典,循環訪問表中的是的值,並將其存儲在字典中,並使用行作爲鍵。然後使用連接生成模式。 – ccsv
@ccsv是的,基本上就是這樣。可能有比使用'iterrows'更優雅的方法來通過模式矩陣,但除此之外,我認爲它非常簡單,您只需要將一些更多的xomplcex單行語句擴展爲多行以提高可讀性。 – Marius