Pandas:高效更改多列中的多个值

Pandas: Efficiently change multiple values in multiple columns

我的 DataFrame 是 94 列乘以 728k 行。每个值都是代表一种颜色的字符串。我的目标是将每种颜色转换为相应的数值。

这是一个可重现的例子。在此示例中,我想按如下方式转换字符串:

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

输出将是:

    group1  group2  group3
0        3       3       5  
1        4       2       1
2        1       1       5
3        5       1       2

鉴于我的实际数据的大小,我如何才能有效地做到这一点?

您可以先使用字典将字符串映射为整数:

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

字典的优点是允许您选择将哪些字符串映射到哪些整数。如果您不介意自动为您生成值,您可以利用 pandas' 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