簡體   English   中英

Boolean 索引器腳本可以正常工作但無法正常工作

[英]Boolean indexer script works without Error but doesn't work

第一個代碼有效,第二個代碼塊沒有給出錯誤,但沒有給出我預期的結果。

第一個代碼創建一個新列 ['Type']。 相同存儲但具有不同名稱的名稱在列 ['Type'] 中分箱。 所以:店鋪名稱 A 和店鋪名稱 B 在列 ['Naam'] 中。 該腳本在 ['Type'] 列中將兩者都標記為 'Supermarket'。 到目前為止,一切都很好。

第二個代碼塊應該標記在 Namendict.test 字典中沒有命名的每個商店/商店等。 我希望這些未被識別的商店/商店等標記為 ['Diversen']。 希望有人有建議。 謝謝!

1:工作代碼:

from Namendict import test

for value in df['Naam']:
     for i, (k,v) in enumerate(test.items()):          
        boolean_indexer = df['Naam'].str.contains(k)
        df.loc[boolean_indexer, 'Type'] = (v) 

2:應該工作代碼(沒有錯誤,但列['Type']中也沒有Diversen,只有NaN):

from Namendict import test

for value in df['Naam']:
     for i, (k,v) in enumerate(test.items()):          
        boolean_indexer = df['Naam'].str.contains(k)
        if True:
            df.loc[boolean_indexer, 'Type'] = (v)
        else:
            df.loc[boolean_indexer, 'Type'] = ('Diversen.') 

非常感謝。 詹尼曼

有多種選擇可以解決這個問題。 第一個選項只是用fillna的 fillna function 替換 'NaN' 值之后。 這看起來如下:

from Namendict import test

# Looping over all existing records in the dict
for k,v in test.items():          
   boolean_indexer = df['Naam'].str.contains(k)
   df.loc[boolean_indexer, 'Type'] = v

# Filling in all empty ("nan") values with "Diversen."
df['Type'] = df['Type'].fillna("Diversen.")

另一種選擇是檢查名稱是否存在於“測試”字典中。 如果是這樣,存儲在字典中的“類型”可以放在 DataFrame 中。 這會循環遍歷列中的所有唯一名稱,而不是遍歷所有值。 這確保您不會多次執行相同的操作。

from Namendict import test

for naam in df['Naam'].unique(): # Loop over all unique names in DataFrame
    boolean_indexer = df['Naam'].str.contains(naam)

if naam in test.keys(): # Check if the name allready excist in dict
    # If True --> get type from the dictionary     
    df.loc[boolean_indexer, 'Type'] = test[naam] 
else:
    # If False --> fill in 'Diversen.' 
    df.loc[boolean_indexer, 'Type'] = "Diversen."  

暫無
暫無

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

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