在 pandas 中检查特定列中的空白值和条件异常

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

在此输入图片描述查询1

我有一个包含 100 列的 CSV 文件。其中,我想检查以下列中的空白值:

bank and trade code
book value
business unit
COE value
corporate product id
counterparty legal entity
currency
cusip
face amount
legal entity
origination date
QRM book value
QRM face value

如果这些列中的任何列包含空白值,我想在打印语句中突出显示特定列。但是,起始日期列有一个特殊条件:如果它包含空白值,但相应的源系统列具有“关闭后调整”或“GL-SDI 间隙”等值,则这些空白值是可接受的,不应被标记。我已经尝试过代码,但这没有按预期工作。

查询2

检查科学记数法: 我还想检查以下列中的任何值是否采用科学计数法:

book value
face amount
QRM book value
QRM face amount

如果这些列中的任何列包含科学记数法中的值,我想通过编写以下代码在打印语句中突出显示这一点,但它打印所有 4 个 coulmns 名称我如何故意将 book_value 列下的第一个单元格值更改为科学

对于第一个查询,我尝试了这个

import pandas as pd

# Read the CSV file
df = pd.read_csv('c:/user/file.csv')

# Columns to check for blank values
columns_to_check = ['bank', 'trade code', 'book value', 'business unit', 'COE value', 'corporate product id',
                    'counterparty legal entity', 'currency', 'qsip', 'face amount', 'legal entity',
                    'origination date', 'qrm book value', 'qrm face value', 'source system']

# Function to check for blank values and print column names with blanks
def check_for_blank_values(df):
    for col in columns_to_check:
        blank_values = df[df[col].isna()]
        if not blank_values.empty and not (col == 'origination date' and ~blank_values['source system'].isin(['post-close adjustment', 'GL-SDI gap']).all()):
            print(f"Column '{col}' has blank values.")

# Check for blank values
check_for_blank_values(df)

对于第二个查询,我尝试了这个 在此输入图片描述

import pandas as pd


`# Read the CSV file
df = pd.read_csv('c:/user/file.csv')

# Function to check if any value in the column is in scientific notation
def check_scientific_values(df, column_names):
    for column_name in column_names:
        df[column_name] = pd.to_numeric(df[column_name], errors='coerce')
        if df[column_name].dtype == 'float64':
            print(f"The values in column '{column_name}' are in scientific notation.")

# Columns to check
columns_to_check = ['book value', 'face amount', 'QRM face amount', 'QRM book value']


check_scientific_values(df, columns_to_check)`
python pandas dataframe csv
1个回答
0
投票

我认为您没有正确处理起始日期。您可以在第一个查询示例中尝试此操作:

import pandas as pd

df = pd.read_csv('/mnt/data/your_file.csv')

columns_to_check = ['bank', 'trade code', 'book value', 'business unit', 'COE value', 'corporate product id',
                    'counterparty legal entity', 'currency', 'cusip', 'face amount', 'legal entity',
                    'origination date', 'QRM book value', 'QRM face value']

def check_for_blank_values(df):
    for col in columns_to_check:
        blank_values = df[df[col].isna()]
        if col == 'origination date':
            blank_values = blank_values[~blank_values['source system'].isin(['post-close adjustment', 'GL-SDI gap'])]
        if not blank_values.empty:
            print(f"Column '{col}' has blank values.")

check_for_blank_values(df)

然后您可以实现一些正则表达式来识别科学记数法值。在您的第二个查询示例中尝试此操作:

import pandas as pd

df = pd.read_csv('/mnt/data/your_file.csv')

def check_scientific_values(df, column_names):
    for column_name in column_names:
        scientific_notation_found = df[column_name].astype(str).str.contains(r'^\d+\.?\d*e[+-]?\d+$', case=False)
        if scientific_notation_found.any():
            print(f"The values in column '{column_name}' are in scientific notation.")

columns_to_check = ['book value', 'face amount', 'QRM book value', 'QRM face amount']

check_scientific_values(df, columns_to_check)
© www.soinside.com 2019 - 2024. All rights reserved.