我找到了這個問題的幾個答案,但似乎沒有一個可以解決或解決我應用它們時彈出的錯誤。例如,這個答案我有一個資料框df和一個函式my_func(string_1,string_2),我正在嘗試使用以下內容創建一個新列:
df.['new_column'] = df.apply(lambda x: my_func(x['old_col_1'],x['old_col_2']),axis=1)
我收到一個源自內部的錯誤,my_func告訴我這old_col_1是浮點型別,而不是預期的字串。特別是,第一行my_func是old_col_1 = old_col_1.lower(),錯誤是
AttributeError: 'float' 物件沒有屬性 'lower'
通過包含使用資料幀列印輸出的除錯陳述句,我已經驗證old_col_1并且old_col_2確實都是字串。如果我在作為引數傳遞時將它們顯式轉換為字串,那么my_func如果將數字資料轉換為字串,則其行為將與您預期的一樣,盡管列值絕對不是數字。
根據這個答案,我什至明確確保在創建資料框時這些列沒有被“智能”錯誤地轉換:
df = pd.read_excel(file_name, sheetname,header=0,converters={'old_col_1':str,'old_col_2':str})
該函式my_func在單獨呼叫時運行良好。所有這一切都讓我懷疑正在傳遞資料框中的索引或其他一些數字資料,而不是(僅)列值。
其他實作似乎給出了同樣的問題。例如,
df['new_column'] = np.vectorize(my_func)(df['old_col_1'],df['old_col_2'])
產生相同的錯誤。變化(例如使用df['old_col_1'].to_numpy()或df['old_col_1'].values代替df['old_col_1'])不會改變這一點。
uj5u.com熱心網友回復:
您的列中是否有可能有 np.nan/None/null 資料?如果是這樣,您可能會收到與此資料引起的錯誤類似的錯誤
data = {
'Column1' : ['1', '2', np.nan, '3']
}
df = pd.DataFrame(data)
df['Column1'] = df['Column1'].apply(lambda x : x.lower())
df
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/481933.html
