You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas特定列空值校验(含条件例外)与科学计数法检测问题

CSV数据校验问题及修复

需求说明

我有一个包含100列的CSV文件,需完成两项数据校验任务:

任务1:指定列空值校验

需检查以下列的空值:

  • 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

校验规则:若列存在空值需打印标记,但origination date列有例外:当对应source system列值为"post-close adjustment"或"GL-SDI gap"时,其空值无需标记。现有代码未按预期运行。

任务2:指定列科学计数法值校验

需检查以下列是否存在科学计数法格式的值:

  • book value
  • face amount
  • QRM book value
  • QRM face amount

校验规则:若存在需打印标记,但现有代码误报全部4列。


我尝试的代码

空值校验代码

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)

修复方案

任务1:空值校验代码修复

原代码问题点:

  1. 列名匹配错误:将bank and trade code拆分为两列,cusip误写为qsip,QRM开头的列名写成小写,还错误加入了不需要检查空值的source system列。
  2. 例外逻辑错误:原判断逻辑仅当所有空值行的source system都不在例外列表时才标记,实际需求是只要存在一行空值行的source system不在例外列表,就需要标记该列。

修复后代码:

import pandas as pd

df = pd.read_csv('c:/user/file.csv')

# 修正列名,严格匹配需求中的目标列
columns_to_check = [
    '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'
]

def check_for_blank_values(df):
    for col in columns_to_check:
        # 获取当前列的所有空值行
        blank_rows = df[df[col].isna()]
        if blank_rows.empty:
            continue
        
        # 处理origination date的特殊例外规则
        if col == 'origination date':
            # 筛选出不符合例外条件的空值行(source system不在指定列表)
            invalid_blanks = blank_rows[~blank_rows['source system'].isin(['post-close adjustment', 'GL-SDI gap'])]
            if not invalid_blanks.empty:
                print(f"Column '{col}'存在不符合例外条件的空值。")
        else:
            print(f"Column '{col}'存在空值。")

check_for_blank_values(df)

任务2:科学计数法检测代码修复

原代码问题点:

将列数据类型为float64等同于存在科学计数法值,这是错误的——float是数值存储类型,科学计数法是数值的字符串表示格式,必须检查原始字符串是否包含科学计数法标识(e或E)。

修复后代码:

import pandas as pd

df = pd.read_csv('c:/user/file.csv')

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

def check_scientific_values(df, column_names):
    for col in column_names:
        # 过滤空值并转为字符串,保留原始格式信息
        non_null_vals = df[col].dropna().astype(str)
        # 检查是否存在包含e/E的科学计数法格式值
        has_sci_notation = non_null_vals.str.contains(r'[eE]', regex=True).any()
        if has_sci_notation:
            print(f"Column '{col}'存在科学计数法格式的值。")

check_scientific_values(df, columns_to_check)

内容的提问来源于stack exchange,提问作者Peter Parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:22:03