我的DataFrame是94列,728k行。每个值都是表示颜色的字符串。我的目标是将每种颜色转换为相应的数值。
这是一个可重复的例子。在这个例子中,我想按如下方式转换字符串:
criticité = Occurence * Gravité
输出将是:
blue = 1
green = 2
red = 3
grey = 4
orange = 5
data = {'group1': ['red', 'grey', 'blue', 'orange'],
'group2': ['red', 'green', 'blue', 'blue'],
'group3': ['orange', 'blue', 'orange', 'green']}
data = pd.DataFrame(data)
data
group1 group2 group3
0 red red orange
1 grey green blue
2 blue blue orange
3 orange blue green
考虑到实际数据的大小,我怎么能有效地做到这一点?
答案 0 :(得分:3)
您可以先使用字典将字符串映射为整数:
d = {'blue': 1, 'green': 2, 'red': 3, 'grey': 4, 'orange': 5}
然后使用replace
并传入该词典:
>>> data.replace(d)
group1 group2 group3
0 3 3 5
1 4 2 1
2 1 1 5
3 5 1 2
字典的优点是允许您选择将哪些字符串映射到哪个整数。如果您不介意自动为您生成的值,您可以利用熊猫的优势。 categorical数据类型。
理想情况下,我们会编写data.astype('category')
并从那里开始,但从0.17.1开始,未实现二维分类转换。
解决方法是堆叠,转换和取消堆栈:
>>> c_data = data.stack().astype('category')
>>> c_data.cat.codes.unstack()
group1 group2 group3
0 4 4 3
1 2 1 0
2 0 0 3
3 3 0 1