attributeError 将列列表与 pandas 数据框列进行比较

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

我有一个列列表,用于逐行验证 pandas 数据框中的空值作为函数的输入。 如果数据帧中的字段不为空,则字典计数器需要增加列表数量的分数。 例如 - 如果输入数据框中 1 个列表列不为空,则指标 = .25 如果第二个不为空,则指标会增加并变为 0.5 如果全部不为空,则指标 = 1

我尝试了以下操作,但是由于错误而无法进一步进行。

假设函数的输入为数据帧行(df.iloc[0])。该函数将为数据框中的每一行运行以计算该指标。

metadata_fields = ['field1', 'field2', 'field3', 'field4']
    
    def score_completeness(df):
       
        metrics = {
        'check_nulls': 0
        }
    
        for fields in metadata_fields:
            if df[fields].notnull().any():
                    metrics['check_nulls'] += 1 / len(metadata_fields)
       
    
        return metrics.values()

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [26], in <cell line: 1>()
----> 1 score_completeness(df)

Input In [25], in score_completeness(df)
      5 metrics = {
      6 'check_nulls': 0
      7 }
      9 for fields in metadata_fields:
---> 10     if df[fields].notnull().any():
     11             metrics['check_nulls'] += 1 / len(metadata_fields)
     14 return metrics.values()

AttributeError: 'str' object has no attribute 'notnull'
pandas function attributeerror
1个回答
0
投票

要修复此错误,您可以修改 for 循环以使用 fields 变量作为键来访问数据框中的相应列

def score_completeness(df):
    metrics = {
        'check_nulls': 0
    }

    for field in metadata_fields:
        if not df[field].isna().any():
            metrics['check_nulls'] += 1 / len(metadata_fields)

    return metrics.values()

这里,我们使用 isna() 方法检查列中是否有任何值为空,然后相应地增加metrics['check_nulls']值。

© www.soinside.com 2019 - 2024. All rights reserved.