2 回答

TA貢獻1906條經驗 獲得超3個贊
最好使用小寫值,因此您不必匹配所有變體。這可以通過 來實現str.lower()。
用于str.strip()刪除前導和尾隨空格
import pandas as pd
# test dataframe
trainData = pd.DataFrame({'F10': ['White ', 'White', 'Black', ' Asian-Pac-Islander', ' White ', ' Black']})
# strip, lower and map
trainData['F10_numeric'] = trainData['F10'].str.strip().str.lower().map({'white': 0, 'black': 1, 'asian-pac-islander': 2})
# display(trainData)
F10 F10_numeric
0 White 0
1 White 0
2 Black 1
3 Asian-Pac-Islander 2
4 White 0
5 Black 1
前面的代碼不會修復該F10列,它只是針對映射進行調整。
下面將更新F10,然后將值映射到數字。
# fix F10
trainData['F10'] = trainData['F10'].str.strip().str.lower()
# map on the fixed F10 column
trainData['F10_numeric'] = trainData['F10'].map({'white': 0, 'black': 1, 'asian-pac-islander': 2})
# display(trainData)
F10 F10_numeric
0 white 0
1 white 0
2 black 1
3 asian-pac-islander 2
4 white 0
5 black 1

TA貢獻1786條經驗 獲得超13個贊
如果您想更改數據框中的實際列,則必須使用以下命令:
trainData['F10'].replace({' White': 0, ' Black': 1, ' Asian-Pac-Islander': 2, 'white': 0, 'White': 0, 'Black': 1, 'Asian-Pac-Islander': 2, " White": 0, " Black": 1, " Asian-Pac-Islander": 2, "white": 0, "White": 0, "Black": 1, "Asian-Pac-Islander": 2}, inplace=True)
請注意,我使用了inplace=True
一個不需要的更好的替代方案inplace=True
是:
trainData['F10'] = trainData['F10'].str.strip().str.lower().replace({'white': 0, 'black': 1, 'asian-pac-islander': 2})
添加回答
舉報