gpt4 book ai didi

Pandas:有错误的行的位置

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:24 26 4
gpt4 key购买 nike

我对 Pandas 还很陌生,并试图找出我的代码损坏的地方。假设我正在进行类型转换:

df['x']=df['x'].astype('int')

...我收到错误“ValueError:以 10 为基数的 long() 的文字无效:'1.0692e+06'

一般来说,如果数据框中有 1000 个条目,我如何找出哪个条目导致中断。 ipdb 中是否有任何内容可以输出当前位置(即代码损坏的位置)?基本上,我试图找出哪些值无法转换为 Int。

最佳答案

您看到的错误可能是由于 x 中的值引起的列是字符串:

In [15]: df = pd.DataFrame({'x':['1.0692e+06']})
In [16]: df['x'].astype('int')
ValueError: invalid literal for long() with base 10: '1.0692e+06'

理想情况下,可以通过确保存储在当 DataFrame 构建时,DataFrame 已经是整数而不是字符串了。如何做到这一点当然取决于您如何构建 DataFrame。

事后,可以使用 applymap 修复 DataFrame:

import ast
df = df.applymap(ast.literal_eval).astype('int')

但是打电话ast.literal_eval对 DataFrame 中的每个值进行处理可能会很慢,这就是为什么从一开始就解决问题是最好的选择。

<小时/>

通常你可以drop to a debugger when an exception is raised检查row的有问题的值。

但是,在这种情况下,异常发生在对 astype 的调用内。 ,它是 C 编译代码的薄包装。 C 编译的代码正在循环 df['x'] 中的值。 ,因此 Python 调试器在这里没有帮助——它不允许您反射(reflection)从 C 编译代码中引发的异常值。

Pandas 和 NumPy 有许多重要部分是用 C、C++、Cython 或 Fortran 编写的,Python 调试器不会带您进入处理快速循环的那些非 Python 代码段。

因此,我会恢复到一个简单的解决方案:迭代 Python 循环中的值并使用 try...except捕获第一个错误:

df = pd.DataFrame({'x':['1.0692e+06']})
for i, item in enumerate(df['x']):
try:
int(item)
except ValueError:
print('ERROR at index {}: {!r}'.format(i, item))

产量

ERROR at index 0: '1.0692e+06'

关于Pandas:有错误的行的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57861414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com