Python 熊猫串接cols/数据类型,以10为基数的int()的文本无效

Python 熊猫串接cols/数据类型,以10为基数的int()的文本无效,python,pandas,Python,Pandas,在我的代码中,我尝试连接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,i

在我的代码中,我尝试连接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,但在“book”列中出现了这个错误。“book”的数据类型为float64,其余列为对象

“基数为10的int()的文本无效:'0023_TEST','发生在索引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')
runfile('V:/excelguy/scripts/output.py',wdir='V:/excelguy/scripts')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('V:/excelguy/scripts/output.py',wdir='V:/excelguy/scripts')
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第827行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第110行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“V:/excelguy/scripts/output.py”,第63行,在
final['join_key']=final.loc[:,['endOfDay','book','bdr']].应用(lambda x:'|'.连接(x.astype(np.int64).to_numpy()),轴=1)
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\frame.py”,第6913行,在apply中
返回操作获取结果()
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\apply.py”,get\U结果中第186行
返回self.apply_标准()
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\apply.py”,第292行,应用标准
自应用_系列_生成器()
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\apply.py”,第321行,在应用系列生成器中
结果[i]=self.f(v)
文件“V:/excelguy/scripts/output.py”,第63行,在
final['join_key']=final.loc[:,['endOfDay','book','bdr']].应用(lambda x:'|'.连接(x.astype(np.int64).to_numpy()),轴=1)
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\generic.py”,第5882行,在astype中
dtype=dtype,copy=copy,errors=errors,**kwargs
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\internals\managers.py”,第581行,在astype中
返回self.apply(“astype”,dtype=dtype,**kwargs)
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\internals\managers.py”,第438行,在apply中
应用=getattr(b,f)(**kwargs)
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\internals\blocks.py”,第559行,在astype中
返回self.\u astype(数据类型,copy=copy,errors=errors,values=values,**kwargs)
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\internals\blocks.py”,第643行,在_astype中
values=astype_nansafe(VAL1D,dtype,copy=True,**kwargs)
文件“C:\Users\test\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\core\dtypes\cast.py”,第707行,在astype_nansafe中
返回lib.astype_intsafe(arr.ravel(),dtype)。重塑(arr.shape)
文件“pandas\\u libs\lib.pyx”,第547行,在pandas.\u libs.lib.astype\u intsafe中
ValueError:(“在索引0处发生以10为基数的int()无效文字:“0023_TEST”)

需要更多信息,尤其是原始数据结构。从错误跟踪中可以看出,您的astype映射正在跨字符串进行,这将失败。因此,这意味着您没有正确地将转换应用于唯一预期的列,或者该列中存在字符串。是否有什么原因导致后处理无法删除尾随的小数?一开始小数是怎么到的。如果您想删除它们,可以在读取/加载时执行删除。我附上了完整的错误。这有帮助吗?看起来您试图更改的列的类型包含字符串?请核实。如果所有条目都是浮点数形式的“整数”,则
df.astype(int)
函数应给出所需的输出。我尝试
final['join\u key'].astype(int)
并获取int()的无效文本。尝试以下操作:final['join\u key'].astype(int,错误='ignore')