【发布时间】:2017-03-06 22:17:27
【问题描述】:
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'
但是,这些更改并没有停留在循环之外,而是停留在循环内部。
【问题讨论】:
-
df.Cabin.str.ljust(3)做你想做的一切。如果您遇到排序问题,请提出该问题。 -
哇,你说得对。我不明白为什么我的循环不起作用。当我运行我的循环时,尽管没有错误,但 A5 和 A6 并没有像我运行你的代码时那样被推到左边。