Cabin_Fare.Cabin.head(20)(产生这些结果)
583 A10
208 A11
475 A14
556 A16
331 A18
284 A19
599 A20
28 A21
630 A23
867 A24
647 A26
112 A29
209 A31
185 A32
445 A34
293 A34
374 A34
806 A36
96 A5
23 A6
我将它分配给x并将对象类型转换为字符串类型。
x = Cabin_Fare.Cabin.astype('string')
我正在尝试将A5 / A6(最后两个值)之类的值推到左侧一个空格,因为在对列进行排序时,任何只有len为2的值都没有正确排序。我假设是因为它们与那些len为3的值不一致。
所以我尝试运行此代码,但我没有看到任何更改(A5 / A6没有向左推一个空格)
for i in x[x.notnull()]:
if len(i) == 2:
i= i.ljust(3,)
编辑:我正在尝试使用Boud的解决方案而且我遇到了一个问题,因为有值/实例只存在字母(没有数字)。 错误显示为:
ValueError: invalid literal for long() with base 10: ''
为了避免这种情况,我试图在只有字母的值中添加“0”。
for i in x:
if len(i)==1:
i = i+'0'
然而,这些变化并没有停留在循环之外,只是在内部。
答案 0 :(得分:1)
实际上,你的价值观并没有领先的空间。对字符串排序将应用按字母顺序排列的字母顺序。所有字符串都以A
开头,然后第二个字符是数字,5和6是在您的示例中大于0,1,2和3的数字。因此,数字被认为是数字,但是作为单个数字的序列。
如果您希望按A
之后的数字进行排序,请删除第一个字符,转换为int
,对该系列的int进行排序,然后基于x
重新引用x.reindex(x.str[1:].astype(int).sort_values().index)
Out[57]:
18 A5
19 A6
0 A10
1 A11
2 A14
3 A16
4 A18
5 A19
6 A20
7 A21
8 A23
9 A24
10 A26
11 A29
12 A31
13 A32
14 A34
15 A34
16 A34
17 A36
Name: Cabin, dtype: object
来提取数字在正确排序的结果索引上:
dynamic