熊猫:有效地更改多列中的多个值

时间:2016-03-12 15:27:25

标签: python pandas dataframe substitution

我的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

考虑到实际数据的大小,我怎么能有效地做到这一点?

1 个答案:

答案 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