我有一个像这样构建的 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)
说明:
- 验证规则函数:
-
该函数
验证数据(df)
包含一组用于验证数据框的规则。 - 它遍历数据框的每一行,并根据定义的规则检查特定列中的值。
-
如果违反了规则,则会将包含有关无效记录的信息(行号、列名和错误消息)的字典附加到
无效记录
列表中。 -
示例用法:
- 从 CSV 文件加载示例数据。
-
调用
验证数据(df)
函数来验证数据并接收包含任何无效记录的数据框。 - 打印无效记录数据框以显示结果。
-
可选:将无效记录数据框保存到一个单独的 CSV 文件中,以便于审查。
-
自定义验证规则:
-
你可以轻松地通过修改
验证数据(df)
函数中的逻辑来修改和扩展验证规则,以适应你的特定需求。 -
添加更多
if
或elif
语句来包含其他规则或列之间的复杂验证。
通过使用这种方法,你可以定义一组全面的验证规则,有效地检查你的数据,并轻松识别和分离出任何无效记录。
标签:python,pandas,dataframe,decision-tree From: 78840995