请考虑以下列表my_list
,其中存储了3个数据框:
DF1
fur_color frequency column_name
Black 9843 fur_color
Brown 8733 fur_color
White 3419 fur_color
BLACK 1277 fur_color
Tan 988 fur_color
DF2
size frequency column_name
Small 8391 size
Medium 4730 size
Mdm 1322 size
L 4531 size
Large 5286 size
DF3
adoption_status frequency column_name
Yes 11239 adoption_status
Y 1532 adoption_status
No 3588 adoption_status
Scheduled 4127 adoption_status
Sched. 3774 adoption_status
我想创建一个由列表中每个DataFrame的所有错误值组成的单个DataFrame。
在fur_color列中,诸如Tan
(应为棕色)或BLACK
(应为黑色),Mdm
(应为中)和L
(应为大小列中的“大”,而采用状态字段中的Y
(应为是)和Sched.
(应为已安排)都是错误值。
理想情况下,我想创建一个如下所示的DataFrame:
erroneous_values
error_value frequency column_name expected_value
BLACK 1277 fur_color Black
Tan 988 fur_color Brown
Mdm 1322 size Medium
L 4531 size Large
Y 1532 adoption_status Yes
Sched. 3774 adoption_status Scheduled
出于编程目的,请假设频率列中的值每天都会更新并且可以更改。
我有一些预定义的标准,可以使查找错误变得容易。
我一直在尝试通过在列上使用in
/ not in
来检查它们是否具有不在可接受的值列表中的值,但是,我找不到一种将其实现为DataFrame的好方法(通常返回列表)。有没有可扩展的(假设添加了更多的DataFrames)和优雅的解决方案来解决这个问题?
答案 0 :(得分:1)
您可以使用这样的过滤器
df1[~df1['fur_color'].isin(['Black','White','Brown'])
~
说,过滤器df1['fur_color'].isin(['Black','White','Brown'])
的结果应取反,并且仅选择“其他”行
例如
df1 = pd.read_clipboard()
df1
fur_color frequency column_name
0 Black 9843 fur_color
1 Brown 8733 fur_color
2 White 3419 fur_color
3 BLACK 1277 fur_color
4 Tan 988 fur_color
df1_errors = df1[~df1['fur_color'].isin(['Black','White','Brown'])
df1_errors
fur_color frequency column_name
3 BLACK 1277 fur_color
4 Tan 988 fur_color