我正在嘗試在包含在 Pandas 資料框中的串列中搜索字串,請參見以下示例:
userAuthor hashtagsMessage
post_1 nytimes [#Emmys]
post_2 TMZ []
post_3 Forbes [#BTSatUNGA]
post_4 nytimes [#Emmys]
post_5 Forbes [#BTS, #BTSatUNGA]
如您所見,托管此類串列的列是“hashtagsMessage”。我曾嘗試使用傳統方法進行字串搜索,但我一直無法做到。
如果我想使用傳統方法查找“#BTS”的完全匹配項,您可以使用其中的一些選項,例如:
df['hashtagsMessage'].str.contains("#BTS", case=False)
或者
df['hashtagsMessage']=="#BTS"
或者類似的。不幸的是,這些方法不適用于串列,當我在 DataFrame 中搜索時,我必須做一個額外的步驟,我想在串列內建立索引,但我不確定如何做這部分。
任何幫助都非常感謝!
uj5u.com熱心網友回復:
使用map或apply:
>>> df['hashtagsMessage'].map(lambda x: '#BTS' in x)
post_1 False
post_2 False
post_3 False
post_4 False
post_5 True
Name: hashtagsMessage, dtype: bool
更新
使用更矢量化的方式explode:
>>> df.loc[df['hashtagsMessage'].explode().eq('#BTS').loc[lambda x: x].index]
userAuthor hashtagsMessage
post_5 Forbes [#BTS, #BTSatUNGA]
uj5u.com熱心網友回復:
請搜索原始字串
如果不是實際串列使用:
df['hashtagsMessage'].str.contains(r'#BTS')
如果列出請使用
df['hashtagsMessage'].astype(str).str.contains(r'#BTS')
uj5u.com熱心網友回復:
您可以使用采用串列理解的簡單匿名函式,any()例如:
編輯:我最初假設你想要任何包含“#BTS”的標簽,并且只是編輯以找到完全匹配的(es):)
In [10]: df = pd.DataFrame({'hashtagsMessage':[
[], ["#BTSatUNGA"],
["#Emmys"], ['#BTS', '#BTSatUNGA']]})
In [18]: df['hashtagsMessage'].apply(lambda lst: any(s for s in lst
if s == "#BTS"))
Out[18]:
0 False
1 False
2 False
3 True
Name: hashtagsMessage, dtype: bool
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366364.html
上一篇:合并不同索引級別的資料幀
下一篇:如何垂直合并列?
