#python #pandas
#python #pandas
Вопрос:
Я работаю над проектом python, и я работаю с данными из файла csv, и я пытаюсь преобразовать пользовательские данные во что-то полезное, преобразуя данные из строк в значения с плавающей запятой. Вот один из таких соответствующих столбцов данных
F10
White
White
Black
Asian-Pac-Islander
White
Black
...
Это код, который я использую;
trainData = pd.read_csv('train.csv')
trainData['F10'].map({' 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})
К сожалению, несмотря на это, когда я распечатываю trainData, строки Asian-Pac-Islander, White, Black все еще отображаются. Я использовал это в качестве руководства, что я делаю не так?
Ответ №1:
- Всегда лучше работать со значениями в нижнем регистре, поэтому вам не нужно сопоставлять все варианты. Это может быть достигнуто с
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
Ответ №2:
Если вы хотите изменить фактический столбец в dataframe, вы должны использовать это:
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})