簡體   English   中英

如何過濾列表的 Pandas Dataframe 列

[英]How to Filter a Pandas Dataframe Column of Lists

目標:根據列表列的值過濾行。

鑒於:

指數 pos_order
3192304 ['VB', 'DT', 'NN', 'NN', 'NN', 'NN']
1579035 ['VB', 'PRP', 'VBP', 'NN', 'RB', 'IN', 'NNS', 'NN']
763020 ['VB', 'VBP', 'PRP', 'JJ', 'IN', 'NN']
1289986 ['VB', 'NN', 'IN', 'CD', 'CD']
69194 ['VB', 'DT', 'JJ', 'NN']
3068116 ['VB', 'JJ', 'IN', 'NN', 'NN']
1506722 ['VB', 'NN', 'NNS', 'NNP']
3438101 ['VB', 'VB', 'IN', 'DT', 'NNS', 'NNS', 'CC', 'NN', 'NN']
1376463 ['VB', 'DT', 'NN', 'NN']
1903231 ['VB', 'DT', 'PRP', 'VBP', 'JJ', 'IN', 'NNP', 'NNP']

我想找到一種方法來查詢此表以獲取存在給定模式的行。 例如,如果模式是['IN', 'NN'] ,我應該得到第 763020 和 3068116 行,而不是第 3438101 行。所以要清楚,列表元素的順序也很重要

我試着這樣做,這樣:

def target_phrase(pattern_tested, pattern_to_match):
    if ''.join(map(str, pattern_to_match)) in ''.join(map(str, pattern_tested)):
        print (pattern_tested)
        return True
    else:
        return False

我可以使用 pandas 之外的列表運行此代碼,但是當我嘗試使用類似的東西時:

target_phrase(df.loc[5]['pos_order'], ['IN', 'NN'])

代碼失敗。

有什么線索嗎?

首先,讓我提供一個target_phrase的簡化視圖:

def target_phrase(pattern_tested, pattern_to_match):
    return ''.join(map(str, pattern_to_match)) in ''.join(map(str, pattern_tested))

為什么代碼不起作用? 因為target_phrase期望第一個參數是一個列表,而不是 pandas dataframe。 正確的語法如下:

df['pattern_matched'] = df.apply(lambda x: target_phrase(x['pos_order'], 
                                                         ['IN', 'NN']), axis=1)

此 function 按行應用target_phrase

事實證明,這是一系列事情的結合,Kate 和 Serge 一起讓我想明白了。

因為我擁有一切,被比較的數據類型並不相似。 我正在將字符串與列表進行比較。 我必須添加代碼來將看起來像列表的字符串轉換為列表——Serge 的貢獻。 完成后,感謝 Kate,我能夠成功運行 lambda。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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