熊猫选择不能转换为int或float的行

时间:2019-05-22 07:06:15

标签: python-3.x pandas

我正在一个项目中,其中“ 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

我想通过选择无法转换为浮点的行来注册发现的错误。

1 个答案:

答案 0 :(得分:2)

将参数errors='coerce'添加到to_numeric以将有问题的值转换为NaN,因此对于检查,请使用Series.isnaboolean 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}")