首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于dataframe的所有列,将str替换为int,而不为每列创建字典

对于dataframe的所有列,将str替换为int,而不为每列创建字典
EN

Stack Overflow用户
提问于 2020-12-03 17:45:14
回答 2查看 32关注 0票数 1

假设我有以下数据帧,

代码语言:javascript
复制
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)

我想遍历分类列并将字符串替换为整数。通常的方法是这样做:

代码语言:javascript
复制
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})。我想知道做这件事最有效的方法是什么?即遍历所有分类列,并用数字替换字符串,而不需要逐列创建字典?

EN

Stack Overflow用户

回答已采纳

发布于 2020-12-03 17:48:13

首先通过DataFrame.select_dtypes获取对象列,然后在DataFrame.apply中对每列使用factorize

代码语言:javascript
复制
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     3
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65123429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档