如何确保R和Python脚本使用相同的排序规则?

问题描述 投票:1回答:1

我正在dplyr 1.4.2中使用R 3.6,在熊猫1.0.3中使用Python 3.7。

我需要确保我的R和Python脚本都能以相同顺序对相同字符串向量进行排序。但是,在我的本地环境中不是这样:

在R中:

library(dplyr)
df <- data.frame(
      x = c('abc(_01', 'aaa_05', 'abc_01', 'abc_01', 'abc_01', 'abc_01', NA, 'abc_01', 'abc_02', 'abc_02', 'abc_03')
)
df %>% arrange(x)

生成:

         x
1   aaa_05
2   abc_01
3   abc_01
4   abc_01
5   abc_01
6   abc_01
7   abc_02
8   abc_02
9   abc_03
10 abc(_01
11      NA

在Python中:

import pandas as pd
import numpy as np
df = pd.DataFrame({
'x': ['abc(_01', 'aaa_05', 'abc_01', 'abc_01', 'abc_01', 'abc_01', np.nan, 'abc_01', 'abc_02', 'abc_02', 'abc_03']
})
df.sort_values(['x']).reset_index(drop=True)

生成:

          x
0    aaa_05
1   abc(_01
2    abc_01
3    abc_01
4    abc_01
5    abc_01
6    abc_01
7    abc_02
8    abc_02
9    abc_03
10      NaN

我相信这是由于Python和R使用不同的排序规则而造成的。

如果是这种情况,如何配置两种语言以使用相同的排序规则?

python r sorting collation
1个回答
0
投票

为了确保Python和R Shell都使用相同的排序规则,请设置相同的排序规则之前创建数据帧。

例如:

在R:

Sys.setlocale(category="LC_COLLATE", locale="C")
Sys.getlocale(category="LC_COLLATE")

[1]“ C”

在Python中:

import locale
locale.setlocale(locale.LC_COLLATE, "C")
locale.getlocale(locale.LC_COLLATE)

((无,无)] >>

© www.soinside.com 2019 - 2024. All rights reserved.