相关数据框架:http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data
我已经手动在DataFrame上添加了一个'sex'列,我试图将'Male'替换为0,将'Female'替换为1但是它似乎不起作用。我只是得到'NaN'值而不是1和0。
相关代码:
df['sex'] = df['sex'].map({'Male': 0, 'Female': 1})
它似乎并不特定于“性别”列,因为这不起作用:
df['success'] = df['success'].map({'<=50K': 0, '>50k':1})
有什么想法吗?
答案 0 :(得分:3)
@ayhan是正确的,空格正在导致问题。对此进行更合适的修复可能是添加skipinitialspace
,默认情况下设置为False
,因为您正在使用read_csv读取数据。
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
答案 1 :(得分:1)
类似于@Leb提到的那样,大熊猫read_table也可能发生这种情况。默认情况下,read_table中的skipinitialspace也设置为False。因此,使用skipinitialspace = True将使您在使用read_table时解决此问题。
df = pd.read_table('smsspamcollection/SMSSpamCollection','\t',names = ['label', 'sms_message'],skipinitialspace=True)