您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Pandas DataFrame中的tuple元素遍歷的實現,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
pandas中遍歷dataframe的每一個元素
假如有一個需求場景需要遍歷一個csv或excel中的每一個元素,判斷這個元素是否含有某個關鍵字
那么可以用python的pandas庫來實現。
方法一:
pandas的dataframe有一個很好用的函數applymap,它可以把某個函數應用到dataframe的每一個元素上,而且比常規的for循環去遍歷每個元素要快很多。如下是相關代碼:
import pandas as pd data = [["str","ewt","earw"],["agter","awetg","aeorgh"]] dataframe1 = pd.DataFrame(data=data,columns=["name1","name2","name3"]) print(dataframe1) bool_array = dataframe1.applymap(lambda x:"w" in x) out_array = dataframe1[bool_array] print(out_array) >> name1 name2 name3 0 str ewt earw 1 agter awetg aeorgh name1 name2 name3 0 NaN ewt earw 1 NaN awetg NaN
代碼中,bool_array為一個邏輯矩陣,滿足條件元素的位置為true,否則為false。然后通過邏輯矩陣去索引dataframe1,就可以得出滿足條件的元素。
方法二:
第一種方法是一次性遍歷每個元素,這樣不好分column去處理,那換一種方式可以每次遍歷一列
#接上面代碼 file_columns = dataframe1.columns.tolist() for column in file_columns: bool_index = dataframe1[column].str.contains("w") filter_data = dataframe1[column][bool_index] print(filter_data) >> Series([], Name: name1, dtype: object) 0 ewt 1 awetg Name: name2, dtype: object 0 earw Name: name3, dtype: object
代碼種 Series.str.contains 是 Series 才有的一個操作。另外,filter_data只輸出每一列中滿足條件的元素,更方便下一步的操作。
簡單說明:
針對pandas的dataframe和series,有強大的高階函數:apply,applymap和map函數等,它們比簡單的for循環要快很多,善用這些高階函數會讓你事半功倍。
Pandas DataFrame中的tuple元素遍歷
在用Word2vec計算出詞語的相似度之后,得到的DataFrame格式如下:
1. 索引(index)為輸入的關鍵詞,從第0列開始為相似度最高的詞語和它的余弦相似度。
2. 這個DataFrame 中每一個元素,比如(通話, 0.21321064233779907)的格式為tuple。
輸入數據:
0 1
銀行 (通話, 0.21321064233779907) (鉆石卡, 0.1743093729019165)
手機 (想要, 0.21755412220954895) (長時間, 0.16086308658123016)
期望輸出的數據
1. 只取相似度最高的詞語,丟棄余弦相似度。
2. 把關鍵詞從索引中取出來,單獨作為1列。
期望輸出:
核心關鍵詞 0 1
0 銀行 通話 鉆石卡
1 手機 想要 長時間
Python 實現的代碼:
主要使用1)applymap,2)lambda,3)reset_index,4)rename
import pandas as pd s_df_untuple = s_df.applymap(lambda x: x[0]) # 對dataframe中所有元素,只取tuple中的第0個 s_df_untuple = s_df_untuple.reset_index() # 把索引變為單獨的一列 s_df_untuple.rename(columns={"index": '核心關鍵詞'}, inplace=True) # 對索引這一列重命名
看完上述內容,你們對Pandas DataFrame中的tuple元素遍歷的實現有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。