繁体   English   中英

从 dataframe 中删除行时出现误报

[英]False negatives when removing rows from dataframe

我有几个这样的名单:

时间戳名称代码 Email

我想对这些列表进行排序,以便仅保留正确输入代码的列表。 这里给出了一个示例列表

timestamp                         name                   password          email
2021-03-05 14:35:30.966000        ****                        ZX211          ***
1  2021-03-05 15:08:36.417000     ****                         ZX211         ***

出于隐私原因,我将姓名和电子邮件涂黑了,但你明白了。 有些人写错了代码(ZX211),需要淘汰。 我写了这样的东西。 这应该将不正确的数据扔到另一个数据集。

ana1 = pd.read_excel(oturum, 'ana_1')
ana1_new = pd.DataFrame().reindex_like(ana1)
boyut1=len(ana1.index)
for i in range(0,boyut1):
sifreler=["ZX211","UT938","ZIW92","QVL34","PTCO2","MQL13"]
if ana1.iloc[i,2]!= sifreler[0]:
   ana1.loc[ana1_new.index[i]] = ana1_new.iloc[i]

这成功地删除了代码不正确的行,在本例中为“ZX211”。 但是,它会给出假阴性。 例如,它还删除了一些正确编写的代码和前面有空格的代码(ZX211)与(ZX211)。 我不明白它有什么问题,任何帮助将不胜感激。

没有原始数据很难说,但是您可以使用 boolean 索引来简化代码,例如:

ana1[ana1.password != sifreler[0]]

这是一个玩具示例:

import pandas as pd

passwords = [
    'ZX211',
    'ZX211',
    '   ZX211',    # wrong
    'ZX211',
    '   ZX211   ', # wrong
    'UT938',       # wrong
]
df = pd.DataFrame({
    'name': ['***'] * len(passwords),
    'password': passwords,
})
姓名 密码
0 *** ZX211
1 *** ZX211
2 *** ZX211
3 *** ZX211
4 *** ZX211
5 *** UT938
df[df.password != 'ZX211']
姓名 密码
2 *** ZX211
4 *** ZX211
5 *** UT938
df[df.password == 'ZX211']
姓名 密码
0 *** ZX211
1 *** ZX211
3 *** ZX211

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM