返回'NaN'的熊猫地图功能

时间:2015-11-08 17:06:53

标签: python pandas

相关数据框架: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})

有什么想法吗?

2 个答案:

答案 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)