首页 > 解决方案 > Pandas 检查所需列是否有数据

问题描述

我有两个数据框:

  1. df_data包含将其链接到另一个数据框(df_data_req)的 ID 列,并且那里的其他列包含一些数据。并非所有列都有数据,这在某些情况下是可以的。
  2. df_data_req包含与 df_data 中相同的 ID,并且在此数据框中指定了哪些列应该有数据。
df_data = pd.DataFrame({'ID':['x','y','x','z'],
                   'col1':['1','','2','f'],
                   'col2':['5','5','5','5'],
                   'col3':['','1','3','5']})
df_data_req = pd.DataFrame({'ID':['x','y','z'],
                   'col1':['X','','X'],
                   'col2':['X','X','X'],
                   'col3':['X','X','']})

然后,我想验证 df_data 中的所有行,并检查(基于 ID 列)是否 df_data_req 中指定的所有列都有值。

我期望的是 df_data 的添加列,它表示“缺少数据”或“OK”,这取决于 df_data_req 中指定的内容。样本数据的输出将是:

ID col1 col2 col3 验证
X 1 5 缺失数据
是的 5 1 好的
X 2 5 3 好的
z F 5 5 好的

标签: pythonpandasdataframevalidation

解决方案


这是一种方法set_indexdf.reindex_like后跟条件检查:

a = df_data.set_index("ID").replace("",np.nan)
b = df_data_req.set_index("ID").replace("",np.nan)
c = a.fillna(b.reindex_like(a)).eq("X").any(1)
df_data['validation'] = np.where(c,"MissingData","OK")

print(df_data)

  ID col1 col2 col3   validation
0  x    1    5       MissingData
1  y         5    1           OK
2  x    2    5    3           OK
3  z    f    5    5           OK

推荐阅读