熊猫选择无法转换为 int 或 float 的行

jal*_*zbe 3 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("")
Run Code Online (Sandbox Code Playgroud)

例如:

df['ORIGINAL_VALUE'] contains:
    1.1
    2.0
    3.3
    'Wrong date format' 
    5.0
    6.0
Run Code Online (Sandbox Code Playgroud)

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

jez*_*ael 5

添加参数errors='coerce'to_numeric为转换问题的值NaNS,因此对于检查使用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))
Run Code Online (Sandbox Code Playgroud)

如果需要单独日志中的所有有问题的值:

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}")
Run Code Online (Sandbox Code Playgroud)