如何确保 R 和 Python 脚本使用相同的排序规则?
How to ensure R and Python scripts use the same collation?
我正在使用 R 3.6 和 dplyr 1.4.2,Python 3.7 和 Pandas 1.0.3。
我需要确保我的 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 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)
(None, None)
我正在使用 R 3.6 和 dplyr 1.4.2,Python 3.7 和 Pandas 1.0.3。
我需要确保我的 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 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)
(None, None)