对于熊猫数据框的特定列, 该列实际上是转换为BCD的16位数据。 我只想提取特定行的14-8位并转换为BCD。 以下公式适用于如下所示的小型数据框。
df=pd.DataFrame({'Value':[128,128,436,465], 'Minutes':[1280,16384,1792,1536] })
df['Minutes_1']=df.Minutes.apply(int).apply(bin).str[2:].str[:-8].apply(int, base=2)
df
但是当我申请
df['Minutes_1']=df.Minutes.apply(int).apply(bin).str[2:].str[:-8].apply(int, base=2)
对于更大的688126行数据框,我得到一个错误提示
以int 2为基数的int()无效文字“
Note: Few values of the row are
0, 256,512,768,1024,1280,1536,1792,2048,2304,4096,4352,4608,4864,
5120,5276,5632,5888,6144,6400,8192,8448,8704,8960,9216,9472,9728,9984,10240,10496,12288,
12544,12800,13056,13312,13568,13824,14080,14336,14592,16384,16640,16896,17152,17408,17920,
18176,18432,18688,20480,20736,20992,21248,21504,21760,22016,22272,22528,22784
错误如下
ValueError跟踪(最近一次通话最近) 在 1 df.LO_TIME_0_J2_0 ----> 2 df ['Minutes_1'] = df.LO_TIME_0_J2_0.apply(int).apply(bin).str [2:]。str [:-8] .apply(int,base = 2) 3 df.LO_TIME_0_J2_0
在apply(self,func,convert_dtype,args,** kwds)中的C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ series.py 3192其他: 3193个值= self.astype(object).values -> 3194映射= lib.map_infer(values,f,convert = convert_dtype) 3195 3196如果len(mapped)和isinstance(mapped [0],Series):
pandas._libs.lib.map_infer()中的pandas / _libs / src \ inference.pyx
C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ series.py in(x) 3179#处理ufuncs和lambdas 3180如果kwds或args而不是isinstance(func,np.ufunc): -> 3181 f = lambda x:func(x,* args,** kwds) 3182其他: 3183 f = func
ValueError:以int 2为基数的int()无效文字”
请帮助
答案 0 :(得分:0)
您有一个值0,因此当您将此值转换为bin时,0变为0b0,因此使用提取str[2:].str[:-8]
时就没有值。
我建议您在提取到填充0的填充之间应用zfill(16):
df['Minutes_1'] = df.Minutes.apply(int).apply(bin).str[2:].str.zfill(16).str[:-8].apply(int, base=2)
使用astype可能比apply(int)更快:
df['Minutes_1'] = df.Minutes.astype(int).apply(bin).str[2:].str.zfill(16).str[:-8].apply(int, base=2)
示例:
df = pd.DataFrame( {'Minutes': [1280, 16384, 1792, 1536, 0, 256]})
df['Minutes_1'] = df.Minutes.apply(int).apply(bin).str[2:].str.zfill(16).str[:-8].apply(int, base=2)
输出:
Minutes Minutes_1
0 1280 5
1 16384 64
2 1792 7
3 1536 6
4 0 0
5 256 1
没有zfill,您会遇到错误:
ValueError: invalid literal for int() with base 2: ''