问题描述
在使用pandas对数据DataFrame处理时需要将String类型的值按照编码字典转换成数值类型。每一列有一个单独的编码字典。最初图方便采用的是pandas自带的replace函数,但是效率很低。
# mapdict is like {'a':0,'bb':1}
df[col] = df[col].replace(mapdict)
解决方法
在网上查了一下,发现可以用map替换replace函数。
df[col].map(mapdict.get)
但是还是有问题,如果map之后再重新写回DataFrame,效率还是很慢。
df[col] = df[col].map(mapdict.get)
所以如果要写回数据的话,可以先用numpy.array进行操作。
df_mat = df.values
for i in range(df_mat.shape[1]):
df_mat[:, i] = [mapdict[x] for x in df_mat[:, i]]
df.loc[:, :] = df_mat
我的数据是1000行、7000列,replace用时>2m,修改之后用时<20s。