如何确保R和Python脚本使用相同的排序规则?
我在dplyr 1.4.2中使用R3.6,在Pandas 1.0.3中使用Python 3.7 我需要确保我的R和Python脚本都能以相同的顺序对相同的字符串向量进行排序。但是,在我当地的环境中,情况并非如此: 在R中: 在Python中:如何确保R和Python脚本使用相同的排序规则?,python,r,sorting,collation,Python,R,Sorting,Collation,我在dplyr 1.4.2中使用R3.6,在Pandas 1.0.3中使用Python 3.7 我需要确保我的R和Python脚本都能以相同的顺序对相同的字符串向量进行排序。但是,在我当地的环境中,情况并非如此: 在R中: 在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
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
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
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 shell使用相同的排序规则,请在创建数据帧之前设置相同的排序规则 e、 g: 在R:
Sys.setlocale(category="LC_COLLATE", locale="C")
Sys.getlocale(category="LC_COLLATE")
import locale
locale.setlocale(locale.LC_COLLATE, "C")
locale.getlocale(locale.LC_COLLATE)
[1] “C”
Python中的:
Sys.setlocale(category="LC_COLLATE", locale="C")
Sys.getlocale(category="LC_COLLATE")
import locale
locale.setlocale(locale.LC_COLLATE, "C")
locale.getlocale(locale.LC_COLLATE)
(无,无)您在R和Python中的语言环境设置是什么?另外,R中的
help(“icuSetCollate”)
可能对您有用。由于我在本地环境中运行这两个脚本,我假设它们都继承了我的机器区域设置,但情况显然不是这样。我想以编程方式更改排序规则,以确保在不同的环境中保证相同的行为?检查。在R中,使用Sys.getlocale()
,我确信Python也有类似的功能。R:Sys.getlocale()[1]“en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8”Python:locale.getlocale()('en_AU','UTF-8'))