我有這個例子 df:
df6 = pd.DataFrame({
'answer1': ['UK', 'Paris', 'Toronto'],
'answer2': ['Paris', 'Paris', 'Paris'],
'answer3': ['CA', 'CA', 'CA'],
'correct': [0.4, '3.1', 'Answer3']
})
df6:
answer1 answer2 answer3 correct
0 UK Paris CA 0.4
1 Paris Paris CA 3.1
2 Toronto Paris CA Answer3
我想根據 Answer1 列是 Toronto 的條件將正確列中的文本“Answer3”替換為 3。
所以,我創建了一個函式,然后在 answer1 == Toronto 時使用 apply:
def replace_answer(text):
return text.replace("Answer", "")
df6.loc[df6['answer1'] == 'Toronto', 'correct'] = df6['correct'].apply(lambda x : replace_answer(x))
我收到以下錯誤: AttributeError: 'float' object has no attribute 'replace'
為什么我的代碼處理所有正確的列而我只選擇包含多倫多作為條件的單元格?
uj5u.com熱心網友回復:
該代碼df6['correct'].apply(...)
適用于整個列,因此您收到錯誤
這df6.loc[df6['answer1'] == 'Toronto', 'correct']
只是關于索引的結果
在兩側使用過濾器
df6.loc[df6['answer1'] == 'Toronto', 'correct'] = \
df6.loc[df6['answer1'] == 'Toronto', 'correct'].apply(lambda x: replace_answer(x))
如果你想把所有的都轉換成浮點數,把所有的都傳給方法,你可以讓方法處理它
def replace_answer(text):
""" Remove all non-digit/non-dot """
return float(re.sub(r"[^\d.]", "", str(text)))
df6['correct'] = df6['correct'].apply(replace_answer)
print(df6)
uj5u.com熱心網友回復:
因為你是在應用apply
整個df6的功能。
你應該這樣做:
df6.loc[df6['answer1'] == 'Toronto', 'correct'] = df6.loc[df6['answer1'] == 'Toronto', 'correct'].apply(lambda x : replace_answer(x))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/401275.html