拿Pandas Column的前6位数字

时间:2017-02-24 15:30:19

标签: python pandas dataframe

我有一项任务是获取pandas中列的前6位数字。但是,如果此数字小于6位数,则会在数字末尾添加小数。不幸的是,这对我后来的需求是不可接受的。

我确信我可以通过各种代码摆脱小数,但随着DataFrame变大,它可能会效率低下。

当前代码:

import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN], 
                    'B' : [1,0,3,5,0,0,np.NaN,9,0,0], 
                    'C' : [10,0,30,50,0,0,4,10,1,0], 
                    'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN],
                    'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})

wow2 = df1
wow2['D'] = wow2['D'][:6]
print(wow2)

     A    B   C       D           E
0  NaN  1.0  10  123456      Assign
1  NaN  0.0   0  123456    Unassign
2  3.0  3.0  30  123456      Assign
3  4.0  5.0  50  123456        Ugly
4  5.0  0.0   0  12345.  Appreciate <--- Notice Decimal
5  5.0  0.0   0  12345.        Undo <--- Notice Decimal
6  3.0  NaN   4     NaN      Assign
7  1.0  9.0  10     NaN    Unicycle
8  5.0  0.0   1     NaN      Assign
9  NaN  0.0   0     NaN     Unicorn

如果长度不超过6,我有没有办法可以留下数字?我考虑过将列转换为字符串并进行循环...但我相信这样做效率会非常低并创造比解决方案更多的问题

1 个答案:

答案 0 :(得分:1)

要获取数字的前6位数字(不转换为字符串和返回),您可以使用模operator。 为了将您的数值表示为非浮点数,您需要将它们转换为整数。但是,在同一列中混合整数和np.NaN将导致object(有关详情,请参阅here)。为了解决这个问题(这有点难看),你需要将整数转换为字符串,这会强制dtype为wow2['D'] = wow2['D'].mod(10**6)\ .dropna()\ .astype(int)\ .astype(str) print(wow['D']) 0 123456 1 123456 2 234567 3 345678 4 12345 5 12345 6 345678 7 456789 8 234567 9 NaN Name: D, dtype: object ,因为你混合了字符串和浮点值。

解决方案如下所示:

{{1}}