python - Pandas 检查所需列是否有数据
问题描述
我有两个数据框:
- df_data包含将其链接到另一个数据框(df_data_req)的 ID 列,并且那里的其他列包含一些数据。并非所有列都有数据,这在某些情况下是可以的。
- 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 | 好的 |
解决方案
这是一种方法set_index
,df.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
推荐阅读
- php - 获取包含父母、孩子和元数据的帖子类型
- multicast - Ghost 12 - 不能跨子网多播
- python - pip install regex 无法在 Anaconda python3.6.9 virtualenv 上构建
- go - 如何在 Go 中正确编写 JVM AES/CFB8 加密
- python-3.x - TypeError: unhashable type: 'numpy.ndarray' 合并来自 BigQuery 的 pandas 数据帧时
- android - StartActivityForResult 使用 Room、Coroutine 和 ViewModel 调用了两次
- python - ALSA - 无法获取 CTL elem 的信息
- python - 如何解决一维数据拟合不佳的问题?
- node.js - 如何检索邮递员以快递方式发送的表单数据?
- python - 为什么 cv2.line 不能就地绘制 1 通道 numpy 数组切片?