首页 > 解决方案 > Pandas 连接 cols/datatypes,int() 的无效文字,基数为 10

问题描述

在我的代码中,我尝试像这样连接 3 个字段:

final['join_key'] = final.loc[:, ['endOfDay','book','bdr']].apply(lambda x: '|'.join(x.astype(str).to_numpy()), axis=1)

这很好用,但是我得到了这个结果,我不想显示 10862.0,我想要 10862。

20191031|10862.0|Stack|1354469

我尝试将 astype 更改为 np.float64,int,np.int64,如此处所推荐的如何舍入/删除 pandas 列中的跟踪“.0”零?,但在“书”列上出现此错误。“书”的数据类型是 float64,其余列是对象。

"invalid literal for int() with base 10: '0023_TEST'", 'occurred at index 0')

是否有任何解决方法可以让 10862 删除尾随.0的?

完全错误:

runfile('V:/excelguy/scripts/output.py', wdir='V:/excelguy/scripts')
Traceback (most recent call last):

  File "<ipython-input-102-8c7ef12f36ec>", line 1, in <module>
    runfile('V:/excelguy/scripts/output.py', wdir='V:/excelguy/scripts')

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "V:/excelguy/scripts/output.py", line 63, in <module>
    final['join_key'] = final.loc[:, ['endOfDay','book','bdr']].apply(lambda x: '|'.join(x.astype(np.int64).to_numpy()), axis=1)

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\frame.py", line 6913, in apply
    return op.get_result()

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\apply.py", line 186, in get_result
    return self.apply_standard()

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\apply.py", line 292, in apply_standard
    self.apply_series_generator()

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\apply.py", line 321, in apply_series_generator
    results[i] = self.f(v)

  File "V:/excelguy/scripts/output.py", line 63, in <lambda>
    final['join_key'] = final.loc[:, ['endOfDay','book','bdr']].apply(lambda x: '|'.join(x.astype(np.int64).to_numpy()), axis=1)

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py", line 5882, in astype
    dtype=dtype, copy=copy, errors=errors, **kwargs

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 581, in astype
    return self.apply("astype", dtype=dtype, **kwargs)

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 438, in apply
    applied = getattr(b, f)(**kwargs)

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 559, in astype
    return self._astype(dtype, copy=copy, errors=errors, values=values, **kwargs)

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 643, in _astype
    values = astype_nansafe(vals1d, dtype, copy=True, **kwargs)

  File "C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\dtypes\cast.py", line 707, in astype_nansafe
    return lib.astype_intsafe(arr.ravel(), dtype).reshape(arr.shape)

  File "pandas\_libs\lib.pyx", line 547, in pandas._libs.lib.astype_intsafe

ValueError: ("invalid literal for int() with base 10: '0023_TEST'", 'occurred at index 0')

标签: pythonpandas

解决方案


推荐阅读