PANDAS.READ_EXCEL()转换器中的ValueRror的访问细节[英] Access specifics of ValueError in pandas.read_excel() converters

本文是小编为大家收集整理的关于PANDAS.READ_EXCEL()转换器中的ValueRror的访问细节的处理方法,想解了PANDAS.READ_EXCEL()转换器中的ValueRror的访问细节的问题怎么解决?PANDAS.READ_EXCEL()转换器中的ValueRror的访问细节问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在使用以下内容来确保在进行操作之前具有正确的数据类型:

:

>>> cfun = lambda x: float(x)
>>> df = pd.read_excel(xl, converters={'column1': cfun})

使用转换器代替dtype,以便回溯会明确告诉我什么值引起了问题:

ValueError: could not convert string to float: '100%'

我想做的就是获取这些信息(字符串" 100%"是问题),并告诉用户在数据框/文件中的何处.如何从异常中获取这些信息以获取行索引并打印整个行?

注意:添加百分比不是我用户犯的唯一错误,否则我只是将任何"%"替换为"".

推荐答案

我认为您可以在CSV中的第一读中检查,然后检查哪个行不会转换.这立即找到它们,而不是与ValueError一起一个一个.

请记住,python开始在0处进行编号,并且不包括标题,因此df的行索引将从CSV中的那些(1或2)中关闭.

.

import pandas as pd
df = pd.read_excel(xl)

# Example df
   column1 column2
0      100       A
1     100%       B
2  112,312       C
3      171       D
4  123.123       E
5      NaN       F

df['column1_num'] = pd.to_numeric(df.column1, errors='coerce')
bad_mask = (df.column1_num.isnull()) & ~(df.column1.astype('str').str.lower().isin(['nan']))

bad_rows = df[bad_mask].index.values
#array([1, 2], dtype=int64)

df[bad_mask]
#   column1 column2  column1_num
#1     100%       B          NaN
#2  112,312       C          NaN

我更新了蒙版,因为float能够处理'NaN'字符串,因此它实际上不会在您的阅读中显示为问题,尽管pd.to_numeric仍然将其胁迫至NaN.

.
float('NaN')
#nan
pd.to_numeric('NaN')
#ValueError: Unable to parse string "NaN" at position 0

本文地址:https://www.itbaoku.cn/post/1727776.html