我有一个数据集,其分类特征表示为字符串值,我想在其中填写缺失值。我尝试使用 sklearn SimpleImputer
,但与 pandas 相比,完成任务需要太多时间。两种方法产生相同的输出。
这是在合成数据上重现行为的代码:
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
lst = np.array(['a', 'b', np.nan], dtype='object')
arr = np.random.choice(lst, size=(10**6,1), p=[0.6, 0.3, 0.1])
ser = pd.Series(arr.ravel())
使用 SimpleImputer:
%%time
imp = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
imp.fit_transform(arr)
挂壁时间:13 秒
使用熊猫:
%%time
ser.fillna(value=ser.mode()[0])
挂墙时间:64.8 毫秒
当字符串值更长时(例如“abc”而不是一个字母“a”),情况会变得更糟。对于数值数据,pandas 仍然优于 sklearn,但差异并不大。
我究竟做错了什么?