我有一个列列表,用于逐行验证 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'
要修复此错误,您可以修改 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']值。