【问题标题】:validate pandas dataframe values against dictionary根据字典验证熊猫数据框值
【发布时间】:2015-12-13 15:27:51
【问题描述】:

我想将 csv 文件转换为 pandas 数据框,并在输入时根据各种字典验证 csv 文件的值。

例如,在 csv 文件中,列颜色的唯一可接受值是“red”、“yellow”和“green”。如果 csv 中有一行将颜色列为“紫色”,我想继续将 csv 处理为 pandas 数据框,但会引发错误。我想对数据框中的所有列执行此操作,并且仍然能够使用数据框,只是抛出错误,所以我知道是否有违反我拥有的数据字典的内容。像这样的:

df = pd.read_csv(filename)
error: "There's purple in here!"

color_sort = df.sort(columns= "color")

【问题讨论】:

    标签: python csv dictionary pandas error-handling


    【解决方案1】:

    我不会费心这样做,只需按原样加载整个 csv,然后对列值进行后处理:

    In [32]:
    valid_colours = ['red','green','blue']
    df = pd.DataFrame({'colours':['black', 'red', 'purple', 'blue','green']})
    df
    
    Out[32]:
      colours
    0   black
    1     red
    2  purple
    3    blue
    4   green
    
    In [33]:    
    df['valid'] = df['colours'].isin(valid_colours)
    df
    
    Out[33]:
      colours  valid
    0   black  False
    1     red   True
    2  purple  False
    3    blue   True
    4   green   True
    

    原因是因为在读取 csv 时逐行检查速度很慢,而执行上述操作将是一种矢量化方法并且速度更快

    【讨论】:

    • 嗨!这很棒。比我预期的要高效得多。如果我想运行它只是为了检查是否有任何值返回 False,我该怎么做?我遇到错误:if df['colours'].isin(valid_colours) == False: print "Error: invalid colour found"
    • 认为我刚刚解决了我自己的问题 :) if df['colours'].isin(valid_colours).all(): print "No errors" else: print "color error"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2021-12-12
    • 2016-10-17
    • 2017-08-02
    • 2017-02-27
    • 2019-01-03
    • 2019-10-20
    相关资源
    最近更新 更多