我正在一个项目中,其中“ ORIGINAL_VALUE”列中填充了数据。在某些情况下,服务器会以非数字的错误响应。
通过执行以下操作,我可以检测到何时出现这些错误之一。
try:
df['ORIGINAL_VALUE'] = pd.to_numeric(df['ORIGINAL_VALUE'])
except ValueError:
# I want to register on my log the message recived on ORIGINAL VALUE
log.exception("")
例如:
df['ORIGINAL_VALUE'] contains:
1.1
2.0
3.3
'Wrong date format'
5.0
6.0
我想通过选择无法转换为浮点的行来注册发现的错误。
答案 0 :(得分:2)
将参数errors='coerce'
添加到to_numeric
以将有问题的值转换为NaN
,因此对于检查,请使用Series.isna
和boolean indexing
-然后如有必要,将其转换为列表并连接到字符串:
try:
df['ORIGINAL_VALUE'] = pd.to_numeric(df['ORIGINAL_VALUE'])
except ValueError:
# I want to register on my log the message recived on ORIGINAL VALUE
mask = pd.to_numeric(df['ORIGINAL_VALUE'], errors='coerce').isna()
#if possible missing values
#mask = pd.to_numeric(df['ORIGINAL_VALUE'].fillna('0'), errors='coerce').isna()
L = df.loc[mask, 'ORIGINAL_VALUE'].tolist()
print ("Not converted values are: " + ", ".join(L))
#Not converted values are: Wrong date format
log.exception("Not converted values are: " + ", ".join(L))
如果需要将所有有问题的值放在单独的日志中:
try:
df['ORIGINAL_VALUE'] = pd.to_numeric(df['ORIGINAL_VALUE'])
except ValueError:
# I want to register on my log the message recived on ORIGINAL VALUE
mask = pd.to_numeric(df['ORIGINAL_VALUE'].fillna('0'), errors='coerce').isna()
L = df.loc[mask, 'ORIGINAL_VALUE'].tolist()
for val in L:
print (f"Not converted values are: {val}")
log.exception(f"Not converted values are: {val}")