【问题标题】:Pandas filtering (~isin) is not working熊猫过滤(〜isin)不起作用
【发布时间】:2018-02-14 17:23:56
【问题描述】:

这是我的数据

 omzet_activity_paid_count_january_devices

No    Text    
1     dcbjkd
2     hdgfhds
3     dsdfs
33    jhsda
40    ydgyua

我希望像这样过滤数据

omzet_activity_paid_count_january_devices

No    Text    
3     dsdfs
40    ydgyua

这就是我所做的

user_internal = ['1','2','33']
omzet_activity_paid_count_january_devices = omzet_activity_paid_count_january_devices[~omzet_activity_paid_count_january_devices.No.isin(user_internal)]

上面的代码不起作用,输出仍然像我原来的数据框,我错过了什么?

【问题讨论】:

  • omzet_activity_paid_count_january_devices.No.dtype 是什么?因为好像是int,所以需要user_internal = [1,2,33]
  • 这可能是一个线索 omzet_activity_paid_count_january_devices[omzet_activity_paid_count_january_devices.No.isin(user_internal)] 没有条目的数据框
  • @jezrael : dtype('O')
  • 可能有一些空格,omzet_activity_paid_count_january_devices.No.head().tolist() 是什么?
  • [1, 2, 3, 33, 40]

标签: python pandas filter


【解决方案1】:

我认为你有混合类型的问题 - 数字和字符串。

omzet_activity_paid_count_january_devices.No.dtype
dtype('O')

omzet_activity_paid_count_january_devices.No.head().tolist()
[1, 2, 3, 33, 40] 

所以将No 列转换为字符串:

user_internal = ['1','2','33']
mask = ~omzet_activity_paid_count_january_devices.No.astype(str).isin(user_internal)
omzet_activity_paid_count_january_devices =  omzet_activity_paid_count_january_devices[mask]

或将strings 从列表更改为ints:

user_internal = [1,2,33]
mask = ~omzet_activity_paid_count_january_devices.No.isin(user_internal)
omzet_activity_paid_count_january_devices =  omzet_activity_paid_count_january_devices[mask]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多