首页 > 编程问答 >验证数据但有效值取决于其他列

验证数据但有效值取决于其他列

时间:2024-08-07 15:53:20浏览次数:13  
标签:python pandas dataframe decision-tree

我有一个像这样构建的 Pandas 数据框:

水果 颜色 吃过的吗? 吃过的日期
苹果 红色 2024年3月14日
苹果 绿色 2024年3月14日
苹果 黄色
香蕉 红色
香蕉 黄色 是| ||2024 年 3 月 14 日 我正在尝试创建一些规则来验证我的数据,但有效的规则取决于其他列中的值,例如“红色”在水果为“苹果”时有效,但在水果为“香蕉”时无效;当“吃”为“是”时,“吃”日期有效,但当“吃”为“否”时则无效

我希望能够使用先前手动验证的数据获取 csv,从中制定一组规则,存储将这些规则保存在文件中以供以后使用,然后使用这些规则检查新数据。理想情况下,我只能获得一个包含无效数据的所有行的数据框,但我对此并不太挑剔。

考虑手动设置规则,但有太多可能的组合,因此这似乎不切实际。 谷歌搜索让我找到了决策树,这看起来很有希望,但对于基于可图形数据的预测比验证确切的字符串似乎更有用。

Looked into setting up rules manually, but there too many possible combinations, so that seemed impractical. Googling sent me to decision trees, which seemed promising, but seemed more useful for predictions based on graphable data rather than verifying exact strings.


你可以使用 Python 和 Pandas 库完成此任务。以下是一种定义验证规则、检查数据以及提取无效记录的方法:

import pandas as pd

# 定义验证规则函数
def 验证数据(df):
    """
    应用验证规则并返回无效记录的数据框。

    Args:
        df (pd.DataFrame): 要验证的数据框。

    Returns:
        pd.DataFrame: 包含无效记录的数据框。
    """

    # 初始化一个空的无效记录列表
    无效记录 = []

    # 遍历数据框中的每一行
    for index, row in df.iterrows():

        # 规则 1:如果水果是“苹果”,则颜色可以是“红色”、“绿色”或“黄色”
        if row['水果'] == '苹果' and row['颜色'] not in ['红色', '绿色', '黄色']:
            无效记录.append({ '行': index + 2, '列': '颜色', '错误': '苹果的颜色无效。'})  # 假设数据从第 2 行开始

        # 规则 2:如果水果是“香蕉”,则颜色只能是“黄色”
        if row['水果'] == '香蕉' and row['颜色'] != '黄色':
            无效记录.append({'行': index + 2, '列': '颜色', '错误': '香蕉的颜色无效。'})

        # 规则 3:如果“吃过?”为“是”,则“吃过的日期”不能为空
        if row['吃过吗?'] == '是' and pd.isnull(row['吃过的日期']):
            无效记录.append({'行': index + 2, '列': '吃过的日期', '错误': '“吃过的日期”不能为空,因为已经吃过了。'})

        # 规则 4:如果“吃过?”为“否”,则“吃过的日期”必须为空
        if row['吃过吗?'] == '否' and not pd.isnull(row['吃过的日期']):
            无效记录.append({'行': index + 2, '列': '吃过的日期', '错误': '“吃过的日期”必须为空,因为还没有吃过。'})

    # 从无效记录列表中创建一个数据框(如果存在)
    if 无效记录:
        return pd.DataFrame(无效记录)
    else:
        return pd.DataFrame(columns=['行', '列', '错误'])  # 返回一个带有所需列的空数据框

# 示例用法:
# 从 CSV 文件加载数据(使用你的实际文件名替换 'your_file.csv')
df = pd.read_csv('your_file.csv')

# 验证数据
无效_df = 验证数据(df)

# 打印无效记录
print(无效_df.to_string())

# 将无效记录保存到 CSV 文件(可选)
无效_df.to_csv('invalid_records.csv', index=False)

说明:

  1. 验证规则函数:
  2. 该函数 验证数据(df) 包含一组用于验证数据框的规则。
  3. 它遍历数据框的每一行,并根据定义的规则检查特定列中的值。
  4. 如果违反了规则,则会将包含有关无效记录的信息(行号、列名和错误消息)的字典附加到 无效记录 列表中。

  5. 示例用法:

  6. 从 CSV 文件加载示例数据。
  7. 调用 验证数据(df) 函数来验证数据并接收包含任何无效记录的数据框。
  8. 打印无效记录数据框以显示结果。
  9. 可选:将无效记录数据框保存到一个单独的 CSV 文件中,以便于审查。

  10. 自定义验证规则:

  11. 你可以轻松地通过修改 验证数据(df) 函数中的逻辑来修改和扩展验证规则,以适应你的特定需求。
  12. 添加更多 if elif 语句来包含其他规则或列之间的复杂验证。

通过使用这种方法,你可以定义一组全面的验证规则,有效地检查你的数据,并轻松识别和分离出任何无效记录。

标签:python,pandas,dataframe,decision-tree
From: 78840995

相关文章

  • python+flask计算机毕业设计新冠疫情后病历管理系统(程序+开题+论文)
    志羽·羽场管理与智能推荐系统2220o本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景新冠疫情的爆发对全球医疗体系产生了深远影响,特别是在病历管理方面。传统的病历管理方式在面对大规模......
  • python+flask计算机毕业设计微信小程序“班级小管家”(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和移动互联网的普及,微信小程序作为一种轻量级的应用程序,凭借其无需下载、即用即走的特性,在教育领域展现出了巨大的......
  • 您好,我有一个关于仅使用 python 3.10 发送电子邮件附件的问题
    我在发送包含附件的电子邮件时遇到问题。我的电子邮件的内容类型似乎设置不正确,这导致附件无法正确附加。这是我的电子邮件发送功能的片段:python复制代码self.send(subject=self.subject、recipients=self.recipients、html=""、text=""、attachments=self.attac......
  • python+flask计算机毕业设计社区居民信息管理系统 (程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加快,社区居民信息管理成为社区管理的重要组成部分。传统的社区管理方式存在信息更新不及时、管理效率低下等问题,难以满足......
  • Python安装教程(含MacOS&&Linux系统)
    Python安装教程Windows用户访问Python官网:WelcometoPython.org 打开下载好的安装包根据提示安装   Pip换源(系统级别)(注:Pip在3.4以上的版本才支持,3.4之前的版本可以在cmd中输入 easy_installpip 下载pip)1.为什么要换源?Python安装......
  • python
    字符串比较按位比较,有一位大,整体就大。函数多返回值正确:deftest_return():return1,2,3错误:return1return2函数的多种传参方式位置参数:关键字参数:函数调用时通过“键=值”的形式传递参数(传参顺序无所谓)eg:test(name="niu",age="19")缺省参数:举例说明:def......
  • 将普通 python 文件导入另一个文件时出现 AttributeError
    我是新手。我正在尝试将简单的python文件导入到我的主文件中。相同的代码在我的mac上工作,但在我的电脑上不起作用。我不断收到此错误消息。“AttributeError:模块‘logo’没有属性‘hammer_logo’”第一个文件拍卖.py代码importlogoprint(logo.hammer_logo)第......
  • 使用python读取mysql数据,并记录到本地的文件中
    上次写过一次读取sqlserver数据,写入本地文件。今天分享一下mysql的。原理相似,希望对大家有小小的帮忙PS,我是3.6.13版本python,上一版本用包mysql-connector,一直不成功,查询官方文档,发现这个版本的PYTHON简直是奇葩的存在了。基本所有版本都支持,就是几个小版本排除在外了。......
  • python合并音视频-通过moviepy模块合并音视频
    ......
  • esp32安装circuitpython
    安装Thonnyhttps://thonny.org/在Thonny中安装circuitpython在配置解释器中选择circuitython然后点击右下角“安装或更新...“variant这里我选择了DOITesp32DevelopmentBoard(试过其他的一些个,不知道为什么安装完之后会无限重启,所以最后选择了这个)烧录完之后,重新连接,Th......