相关数据框:http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data

我已经在DataFrame上手动添加了“性别”列,并且尝试将“男性”替换为0,将“女性”替换为1,但是它似乎不起作用。我只是得到一个“ NaN”值,而不是一和零。

相关代码:

df['sex'] = df['sex'].map({'Male': 0, 'Female': 1})


它似乎并不特定于“性别”列,因为这也不起作用:

df['success'] = df['success'].map({'<=50K': 0, '>50k':1})


有什么想法吗?

最佳答案

@ayhan是正确的,空格引起了问题。一个更适当的解决方法是添加skipinitialspace,默认情况下,当您使用read_csv读取数据时,该默认设置为False

df = pd.read_csv(io.StringIO(data), delimiter=',', skipinitialspace=True, header=None )
df[9] = df[9].map({'Male': 0, 'Female': 1})


将给我们(第9列为“性别”列):

   0                 1       2          3   4                   5   \
0  39         State-gov   77516  Bachelors  13       Never-married
1  50  Self-emp-not-inc   83311  Bachelors  13  Married-civ-spouse
2  38           Private  215646    HS-grad   9            Divorced

                  6              7      8   9     10  11  12             13  \
0       Adm-clerical  Not-in-family  White   0  2174   0  40  United-States
1    Exec-managerial        Husband  White   0     0   0  13  United-States
2  Handlers-cleaners  Not-in-family  White   0     0   0  40  United-States

      14
0  <=50K
1  <=50K
2  <=50K

10-04 13:43