假设我有以下数据帧,
d = {'col1':['a','b','c','a','c','c','c','c','c','c'],
'col2':['a1','b1','c1','a1','c1','c1','c1','c1','c1','c1'],
'col3':[1,2,3,2,3,3,3,3,3,3]}
data = pd.DataFrame(d)我想遍历分类列并将字符串替换为整数。通常的方法是这样做:
col1 = {'a': 1,'b': 2, 'c':3}
data.col1 = [col1[item] for item in data.col1] 即为每个分类列制作一个字典并进行替换。但是如果你有许多列,一个接一个地为它们编字典是很耗时的,所以我想知道有没有更好的方法?另外,没有字典我怎么做到这一点。例如,在这个例子中,我们可以在col1上设置3个不同的值,但是如果我们有更多的值,我们应该手工编写(比如{'a': 1,'b': 2, 'c':3, ..., 'z':26})。我想知道做这件事最有效的方法是什么?即遍历所有分类列,并用数字替换字符串,而不需要逐列创建字典?
发布于 2020-12-03 17:48:13
首先通过DataFrame.select_dtypes获取对象列,然后在DataFrame.apply中对每列使用factorize
cols = data.select_dtypes(object).columns
data[cols] = data[cols].apply(lambda x: pd.factorize(x)[0]) + 1
print (data)
col1 col2 col3
0 1 1 1
1 2 2 2
2 3 3 3
3 1 1 2
4 3 3 3
5 3 3 3
6 3 3 3
7 3 3 3
8 3 3 3
9 3 3 3https://stackoverflow.com/questions/65123429
复制相似问题