【问题标题】:Get row of the error when using converters with read_csv使用带有 read_csv 的转换器时获取错误行
【发布时间】:2016-09-01 23:05:53
【问题描述】:

我有一个 csv 文件,其中包含 日期Countries 等信息(只能采用预定义列表中的值),我目前正在使用 converters 参数进行一些健全性检查,如下所示:

import pandas as pd

def datesCheck(x):
    #do some checks and return the formated date
    pass

def countriesCheck(x):
    if x in countriesList:
        return x
    else:
    raise ValueError, x + ' is not a recognised country'

df = pd.read_csv('myCsvFile.csv', converters={'Dates': datesCheck, 'Countries': countriesCheck})

我想知道是否有办法获取引发(或第一个)ValueError(如果有)的行数,以便我可以打开 csv 文件并快速更改它。

感谢您的帮助。周末愉快!

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    引入一个计数器变量并计算行数并引发错误:

    import pandas as pd
    
    current_row = 0
    
    def datesCheck(x):
        current_row += 1
        #do some checks and return the formated date
        # if date ok do nothing
        # else raise ValueError, 'Error Row = ' + str(current_row )
        pass
    
    def countriesCheck(x):
        if x in countriesList:
            return x
        else:
        raise ValueError, x + ' is not a recognised country in row = ' + str(current_row)
    
    df = pd.read_csv('myCsvFile.csv', converters={'Dates': datesCheck, 'Countries': countriesCheck})
    

    【讨论】:

    • 谢谢。我想知道是否有更好的方法,因为有了这个逻辑,我需要为每一列设置一个计数器变量。我猜转换器背后的算法有行信息...
    • 另一种方法是,哪一个行列的值没有解析,设置一个默认值或者设置为NaN,读取完成后过滤所有的NaN值,得到对应的索引是 csv 文件中的第 1 行。
    • 听起来是个好主意!这样,我可以一次对所有不一致的行抛出错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2020-07-26
    • 2017-11-06
    • 2016-06-02
    • 2018-03-19
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多