如何在列中插入值并覆盖现有值

时间:2019-07-03 21:35:31

标签: python-3.x pandas

我正在尝试学习机器学习,我需要为工作流的清理阶段填写缺少的值。我有13列,需要为其中的8个值进行估算。其中一列称为Dependents,我想用失踪词填充空格,并更改包含数据的单元格,如下所示:1到1、2到2、3到3以及3+到threePlus。

我正在Anaconda中运行该程序,并且数据框的名称是train

train.columns

这给了我

Index(['Loan_ID','Gender','Married','Dependents,'Education',        'Self_Employed','ApplicantIncome','CoapplicantIncome','LoanAmount',        'Loan_Amount_Term','Credit_History','Property_Area','Loan_Status'],       dtype ='object')

下一个

    print("Dependents")
    print(train['Dependents'].unique())

这给了我

家属 ['0''1''2''3+'nan]

现在我尝试按所述方式估算值

def impute_dependent():
my_dict={'1':'one','2':'two','3':'three','3+':'threePlus'};
return train.Dependents.map(my_dict).fillna('missing')



def convert_data(dataset):
    temp_data = dataset.copy()
    temp_data['Dependents'] = temp_data[['Dependents']].apply(impute_dependent,axis=1)
return temp_data

这给出了错误

TypeError                                 Traceback (most recent call last)
<ipython-input-46-ccb1a5ea7edd> in <module>()
      4     return temp_data
      5 
----> 6 train_dataset = convert_data(train)
      7 #test_dataset = convert_data(test)

<ipython-input-46-ccb1a5ea7edd> in convert_data(dataset)
      1 def convert_data(dataset):
      2     temp_data = dataset.copy()
----> 3     temp_data['Dependents'] = 
temp_data[['Dependents']].apply(impute_dependent,axis=1)
      4     return temp_data
      5 

D:\Anaconda2\lib\site-packages\pandas\core\frame.py in apply(self, func, 
axis, broadcast, raw, reduce, result_type, args, **kwds)
   6002                          args=args,
   6003                          kwds=kwds)
-> 6004         return op.get_result()
   6005 
   6006     def applymap(self, func):

D:\Anaconda2\lib\site-packages\pandas\core\apply.py in get_result(self)
    140             return self.apply_raw()
    141 
--> 142         return self.apply_standard()
    143 
    144     def apply_empty_result(self):

D:\Anaconda2\lib\site-packages\pandas\core\apply.py in apply_standard(self)
    246 
    247         # compute the result using the series generator
--> 248         self.apply_series_generator()
    249 
   250         # wrap results

D:\Anaconda2\lib\site-packages\pandas\core\apply.py in 
apply_series_generator(self)
     275             try:
    276                 for i, v in enumerate(series_gen):
--> 277                     results[i] = self.f(v)
    278                     keys.append(v.name)
    279             except Exception as e:

TypeError: ('impute_dependent() takes 0 positional arguments but 1 was 
given', 'occurred at index 0')

我希望一,二,三和三加号替换现有值,而缺少以填补空白

1 个答案:

答案 0 :(得分:0)

这会吗?

my_dict = {'1':'one','2':'two','3':'three','3+':'threePlus', np.nan: 'missing'}
def convert_data(dataset):
    temp_data = dataset.copy()
    temp_data.Dependents = temp_data.Dependents.map(my_dict)
    return temp_data

请注意,部分问题可能是使用apply:本质上apply通过函数传递数据并放入结果。我可能是错的,但我认为您的函数需要采用apply提供的输入,例如:

def impute_dependent(dep):
    my_dict = {'1':'one','2':'two','3':'three','3+':'threePlus', np.nan: 'missing'}
    return my_dict[dep]

df.dependents = df.dependents.apply(impute_dependents)

这样,对于df.dependents中的每个值,apply将采用该值并将其提供给impute_dependents作为参数,然后将经过return ed的值作为输出。照原样,当我试用您的代码时,由于impute_dependent不接受任何参数,我得到了一个错误。