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