![](/img/trans.png)
[英]Check substrings of a string value includes any dictionary words in python
[英]How to check if any of elements in a dictionary value is in string?
我有一個帶有字符串的 dataframe 和一個字典,其中的值是字符串列表。 我需要檢查 dataframe 的每個字符串是否包含字典中每個值的任何元素。 如果是這樣,我需要用字典中的適當鍵 label 它。 我需要做的就是使用字典中的鍵對 dataframe 中的所有字符串進行分類。
例如。
df = pd.DataFrame({'a':['x1','x2','x3','x4']})
d = {'one':['1','aa'],'two':['2','bb']}
我想得到這樣的東西:
df = pd.DataFrame({
'a':['x1','x2','x3','x4'],
'Category':['one','two','x3','x4']})
我試過這個,但沒有奏效:
df['Category'] = np.nan
for k, v in d.items():
for l in v:
df['Category'] = [k if l in str(x).lower() else x for x in df['a']]
任何想法表示贊賞!
首先創建一個 function 為您執行此操作:-
def func(val):
for x in range(0,len(d.values())):
if val in list(d.values())[x]:
return list(d.keys())[x]
現在使用split()
和apply()
方法:-
df['Category']=df['a'].str.split('',expand=True)[2].apply(func)
最后使用fillna()
方法:-
df['Category']=df['Category'].fillna(df['a'])
現在,如果您打印df
您將獲得預期的 output:-
a Category
0 x1 one
1 x2 two
2 x3 x3
3 x4 x4
編輯:
您也可以通過以下方式執行此操作:-
def func(val):
for x in range(0,len(d.values())):
if any(l in val for l in list(d.values())[x]):
return list(d.keys())[x]
然后:-
df['Category']=df['a'].apply(func)
最后:-
df['Category']=df['Category'].fillna(df['a'])
我想出了以下啟發式方法,看起來很臟。 它會輸出您想要的結果,盡管有一些警告,因為我使用了 append 值的索引到 dataframe。
import pandas as pd
import numpy as np
def main():
df = pd.DataFrame({'a': ['x1', 'x2', 'x3', 'x4']})
d = {'one': ['1', 'aa'], 'two': ['2', 'bb']}
found = False
i = 0
df['Category'] = np.nan
for x in df['a']:
for k,v in d.items():
for item in v:
if item in x:
df['Category'][i] = k
found = True
break
else:
df['Category'][i] = x
if found:
found = False
break
i += 1
print(df)
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.