亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

從DataFrame中根據指定列的條目查找并返回整行數據

聖光之護
發(fā)布: 2025-10-17 08:55:19
原創(chuàng)
997人瀏覽過

從dataframe中根據指定列的條目查找并返回整行數據

本文旨在提供一種高效的方法,用于在 Pandas DataFrame 中,根據某一列(例如 `cat1`)的值,查找并返回包含該值的完整行數據。我們將介紹如何利用正則表達式和 `multimode` 函數,優(yōu)化查找過程,避免不必要的循環(huán),從而提高代碼的執(zhí)行效率。

在數據分析和處理中,經常需要根據特定條件從 DataFrame 中檢索數據。一個常見的需求是:已知 DataFrame 的某一列的某個值,需要找到包含該值的整行數據。本文將提供一種高效且簡潔的方法來實現這個目標,并避免傳統(tǒng)方法中可能存在的性能瓶頸。

解決方案

核心思路是:首先,構建一個包含所有目標值的正則表達式;然后,使用 re.findall 函數在文本中查找所有匹配項;最后,使用 multimode 函數找出最常見的匹配項,并返回 DataFrame 中包含這些匹配項的行。

以下是具體的實現步驟和代碼示例:

  1. 導入必要的庫
import re
from statistics import multimode
import pandas as pd
登錄后復制
  1. 定義 DataFrame (示例)
data = {'cat0': ['x0', 'x1', 'x2', 'x3', 'x4'],
        'cat1': ['Two', 'Seven', 'Eight', 'Eight', 'twelve'],
        'cat2': ['y0', 'y1', 'y2', 'y2', 'y7']}
A = pd.DataFrame(data)
登錄后復制
  1. 定義 subject_findall 函數
def subject_findall(string, df=A):
    s = df['cat1'].str.replace(r"[^nA-Za-z-??-??-?+]+", "",
                               regex=True).str.lower()
    words = set(s)
    regex = '|'.join(map(re.escape, words))
    top = multimode(re.findall(regex, string.lower()))
    if not top:
        return 'nosubjectfound'
    else:
        print(f'most common: {", ".join(top)}')
        return df[s.isin(top)]
登錄后復制

代碼解釋:

序列猴子開放平臺
序列猴子開放平臺

具有長序列、多模態(tài)、單模型、大數據等特點的超大規(guī)模語言模型

序列猴子開放平臺0
查看詳情 序列猴子開放平臺
  • s = df['cat1'].str.replace(r"[^nA-Za-z-??-??-?+]+", "", regex=True).str.lower():
    • 這行代碼首先從 DataFrame df 的 cat1 列中提取所有字符串。
    • 然后,使用 str.replace 方法,通過正則表達式 r"[^nA-Za-z-??-??-?+]+" 移除所有非字母字符。regex=True 表示使用正則表達式進行替換。
    • 最后,使用 str.lower() 將所有字符串轉換為小寫,以便進行不區(qū)分大小寫的匹配。
  • words = set(s):
    • 將處理后的字符串列表 s 轉換為集合 words。使用集合可以去除重復的單詞,提高后續(xù)步驟的效率。
  • regex = '|'.join(map(re.escape, words)):
    • map(re.escape, words):對集合 words 中的每個單詞應用 re.escape 函數。re.escape 函數用于轉義正則表達式中的特殊字符,確保這些字符被視為普通字符進行匹配,而不是具有特殊含義的元字符。
    • '|'.join(...):使用 | 符號將轉義后的單詞連接起來,創(chuàng)建一個正則表達式。| 在正則表達式中表示“或”的關系,即匹配任何一個連接的單詞。
  • top = multimode(re.findall(regex, string.lower())):
    • string.lower():將輸入的字符串 string 轉換為小寫,以便與 DataFrame 中的單詞進行不區(qū)分大小寫的匹配。
    • re.findall(regex, string.lower()):使用 re.findall 函數在小寫的輸入字符串中查找所有與正則表達式 regex 匹配的單詞。re.findall 返回一個包含所有匹配項的列表。
    • multimode(...):使用 statistics.multimode 函數找出列表中出現頻率最高的單詞。multimode 函數可以處理多個出現頻率相同的單詞,并返回一個包含所有這些單詞的列表。
  • if not top::
    • 檢查 top 列表是否為空。如果為空,表示在輸入字符串中沒有找到與 DataFrame 中任何單詞匹配的項。
    • return 'nosubjectfound':如果 top 列表為空,則返回字符串 'nosubjectfound',表示未找到任何匹配項。
  • else::
    • 如果 top 列表不為空,表示找到了至少一個匹配項。
    • print(f'most common: {", ".join(top)}'):打印出現頻率最高的單詞,用逗號分隔。
    • return df[s.isin(top)]:使用 s.isin(top) 創(chuàng)建一個布爾索引,用于選擇 DataFrame df 中 cat1 列的值包含在 top 列表中的所有行。然后,返回這些行組成的新的 DataFrame。
  1. 調用函數并打印結果
text = 'This is an example with Seven Two Seven and Eight Eight.'
out = subject_findall(text)
print(out)
登錄后復制

代碼解釋:

  • 定義一個測試字符串 text,用于測試 subject_findall 函數。
  • 調用 subject_findall 函數,并將測試字符串 text 作為輸入。將函數的返回值存儲在變量 out 中。
  • 打印變量 out 的值,即函數返回的 DataFrame。

輸出結果:

most common: seven, eight
  cat0   cat1 cat2
1   x1  Seven   y1
2   x2  Eight   y2
3   x3  Eight   y2
登錄后復制

總結

本文提供了一種使用正則表達式和 multimode 函數,從 Pandas DataFrame 中根據指定列的條目查找并返回整行數據的高效方法。該方法避免了不必要的循環(huán),提高了代碼的執(zhí)行效率,尤其適用于處理大型數據集。在實際應用中,可以根據具體需求進行適當的調整和優(yōu)化。

注意事項:

  • 確保 DataFrame 的目標列(例如 cat1)是字符串類型。如果不是,需要先將其轉換為字符串類型。
  • 正則表達式的構建需要根據實際情況進行調整,以確保能夠正確匹配目標值。
  • multimode 函數返回的是一個列表,即使只有一個最常見的匹配項。因此,在后續(xù)處理中需要注意這一點。

以上就是從DataFrame中根據指定列的條目查找并返回整行數據的詳細內容,更多請關注php中文網其它相關文章!

最佳 Windows 性能的頂級免費優(yōu)化軟件
最佳 Windows 性能的頂級免費優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數據和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。

下載
來源:php中文網
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現有涉嫌抄襲侵權的內容,請聯系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網:公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網訂閱號
每天精選資源文章推送
PHP中文網APP
隨時隨地碎片化學習
PHP中文網抖音號
發(fā)現有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號