使用Python进行Excel数据验证

问题描述 投票:0回答:1

有没有办法设置数据验证,条件是,如果所选单元格是某个字符串,则其数据验证映射到定义为其数据验证的特定列? 例如,假设我选择某个单元格为汽车类型(也可以是多个单元格),则其数据验证将是列 {丰田、马自达、宝马),如果单元格为动物类型,则其数据验证将是列是列 {dog , cat ,elephant} 。 如果是这样,有没有办法用 python 设置它? 我知道如何将特定单元格的数据验证设置为某个列,但我不知道如何制作数据验证列,但我不知道如何对其进行调节,就像我上面展示的示例一样。

python excel openpyxl
1个回答
0
投票
import pandas as pd

# Function to validate a column
def validate_column(df, column_name, enum_values):
    # Check for non-null values
    non_null_mask = df[column_name].notnull()
    non_null_failures = df[~non_null_mask]['Unique_Id']
    
    # Check for enum value validation
    enum_failures = df[~df[column_name].isin(enum_values)]['Unique_Id']
    
    return non_null_failures, enum_failures

# Read the data from the CSV file
data_file = "data.csv"  # Replace with your data file path
df = pd.read_csv(data_file)

# Create a dictionary to store enum values for each column
enum_files = {
    'column1': 'enum1.csv',
    'column2': 'enum2.csv',
    # Add more columns and enum files here
}

# Initialize lists to store failed validations
non_null_failures = []
enum_failures = []

# Iterate through columns and validate
for column_name, enum_file in enum_files.items():
    enum_values = pd.read_csv(enum_file)[column_name].tolist()
    non_null, enum = validate_column(df, column_name, enum_values)
    non_null_failures.extend(non_null)
    enum_failures.extend(enum)

# Remove duplicates from the failure lists
non_null_failures = list(set(non_null_failures))
enum_failures = list(set(enum_failures))

# Print the results
print("Unique Ids with non-null failures:", non_null_failures)
print("Columns with enum value failures:", enum_failures)
© www.soinside.com 2019 - 2024. All rights reserved.