【问题标题】:Using Python Great Expectations to remove invalid data使用 Python Great Expectations 删除无效数据
【发布时间】:2021-11-14 01:13:28
【问题描述】:

我刚开始使用 Great Expectations 库,我想知道是否可以使用它从 Pandas DataFrame 中删除无效数据。如果可能的话,我该怎么做? 我还想将无效数据插入 PostgreSQL 数据库。

我在文档和网络搜索中没有找到任何关于此的内容。

稍后编辑: 澄清一下:我需要在这种情况下,例如在 DataFrame 中找到 5 行无效的行(例如 df.expect_column_values_to_not_be_null('age') 有 5 行为 null)以将它们从原始 DataFrame 中删除并将它们插入到PostgreSQL 错误表

【问题讨论】:

    标签: python pandas postgresql great-expectations


    【解决方案1】:

    Great Expectations 是一个强大的数据验证工具。
    像所有强大的工具一样,它并不是那么简单。

    你可以从这里开始:

    import great_expectations as ge
    import numpy as np
    import pandas as pd
        
    # get some random numbers and create a pandas df
    df_raw = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
    
    # initialize a "great_expectations" df 
    df = ge.from_pandas(df_raw)
    
    # search for invalidate data on column 'A'. 
    # In this case, i'm looking for any null value from column 'A'.
    df.expect_column_values_to_not_be_null('A')
    

    结果:

    {
      "exception_info": null,
      "expectation_config": {
        "expectation_type": "expect_column_values_to_not_be_null",
        "kwargs": {
          "column": "A",
          "result_format": "BASIC"
        },
        "meta": {}
      },
      "meta": {},
      "success": true,
      "result": {
        "element_count": 100,
        "unexpected_count": 0,
        "unexpected_percent": 0.0,
        "partial_unexpected_list": []
      }
    }
    

    看看回复:好消息!!!
    我的 df 中没有 null 值。 "unexpected_count" 等于 0

    API 参考: https://legacy.docs.greatexpectations.io/en/latest/autoapi/great_expectations/index.html


    编辑: 如果您只需要找到一些无效值并将您的 df 拆分为:

    1. 清理数据框
    2. 脏数据框

    也许你不需要"great_expectations"。你可以使用这样的函数:

    import pandas as pd
    
    my_df = pd.DataFrame({'A': [1,2,1,2,3,0,1,1,5,2]})
    
    def check_data_quality(dataframe):
        df = dataframe
        clean_df = df[df['A'].isin([1, 2])]
        dirty_df = df[df["A"].isin([1, 2]) == False]
        return {'clean': clean_df, 
                'dirty': dirty_df}
    
    my_df_clean = check_data_quality(my_df)['clean']
    my_df_dirty = check_data_quality(my_df)['dirty']
    

    【讨论】:

    • 首先感谢您的回答。我不明白这个例子:原始 df 中没有空值或巨大的期望是否会从 df 中删除 nul 左值?我需要的是这样的:非常期望在 df 中发现 5 行无效,我需要有可能从原始 df 中删除这些行并将它们插入到错误表中
    • 在我的示例中,“巨大的期望”用于查找原始 df 中是否存在空值。没有替代,没有淘汰。 “远大的期望”非常适合确定您的数据质量。
    • 好的。我理解但不完全是我需要的。我需要(从您的示例中)收集任何列中具有 null 的所有行,从原始 df 中删除它们并将收集的行插入错误表中
    • 很抱歉再次打扰您,但我不明白:如何使用此 API?我不知道有多少行有预期的问题。例如,我期望 ('A' ) 列只有值“一”和“二”。我需要收集所有使该规则无效的行,将它们收集在一个单独的(可能)数据框中并从原始数据框中删除它们
    猜你喜欢
    • 2021-02-18
    • 2021-10-20
    • 2022-07-17
    • 2021-12-23
    • 2020-12-08
    • 2021-10-18
    • 2021-05-22
    • 2021-06-22
    • 2018-04-15
    相关资源
    最近更新 更多