2016-09-20 47 views
1

我有一些城市名稱的縮寫字典,我們的系統(出於某種原因)適用於數據(即「堪薩斯城」縮寫'堪薩斯CY'和俄克拉何馬城拼寫正確)。Python,Pandas - 將數據框中的列應用於數據框中的功能以僅替換某些項目

我有一個問題讓我的函數適用於數據框的列,但它在我傳遞數據字符串時起作用。下面的代碼示例:

def multiple_replace(text, dict): 
    # Create a regular expression from the dictionary keys 
    regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys()))) 

    # For each match, look-up corresponding value in dictionary 
    return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text) 

testDict = {"Kansas CY": "Kansas City"} 

dfData['PREV_CITY'] = dfData['PREV_CITY'].apply(multiple_replace, dict=testDict) 

當我添加「軸= 1」到最後一行就出現了錯誤,說我提供的參數過多。否則,它運行時沒有錯誤,只是在與字典匹配時不進行更改。

預先感謝您! -Reece

+1

如果你已經有一個字典,然後'dfData [ 'PREV_CITY'] = dfData [ 'PREV_CITY'。圖(testDict,na_action =」忽略')'應該可以工作 – EdChum

+0

不可以:-(它只是清除了列 – ProfessionalAmateur

+0

這意味着你d沒有與你的字典鍵完全匹配,你還沒有發佈任何樣本數據,所以這只是一個猜測。 – EdChum

回答

2

您可以使用map並傳遞一個字典與詞典值替換對字典鍵完全匹配,因爲你可能有區分大小寫的比賽我倒是lower所有的字符串第一次之前的比賽:

dfData['PREV_CITY'] = dfData['PREV_CITY'].str.lower().map(testDict, na_action='ignore') 

這個假設在你的字典的鍵也小寫

相關問題