TypeError: 一元 ~ 操作符的操作数类型错误:float。

76
df = df[~df["column"].str.contains("Total")]

TypeError: bad operand type for unary ~: 'float'

为什么.str.contains()会返回浮点数?我应该怎么做?


df["column"].dtypes 的输出是什么? - BENY
@kindall 噢,所以这只是运算符优先级的问题?我会尝试 df[~(df["column"].str.contains("Total"))] - fredley
1
经过一些测试,似乎不是这种情况,对于这个误导感到抱歉。 - kindall
2个回答

161

我认为存在NaN值,因此需要指定参数na

df = pd.DataFrame({
    'column': ['Total','a',np.nan],
    'B': list(range(3))
})
print (df)
  column  B
0  Total  0
1      a  1
2    NaN  2

df = df[~df["column"].str.contains("Total", na=False)]
print (df)
  column  B
1      a  1
2    NaN  2

1
我遇到了相同的错误,基本上是在我的df的特定列上使用.contains。我检查了它,它没有任何NaN。我添加了na=False,错误消失了。即使我正在使用一个没有NaN的字符串列,我怎么能解释我得到的错误呢?所以我正在使用这行代码: df_main = df_main[~df_main['Category'].str.contains('|'.join(searchfor))],其中searchfor是一个单词列表。这样做会生成错误。 - Alex Ruiz
好的,我解决了我的问题。这是我的csv文件源有问题。我没有清除所有单元格,所以pandas将其中一些单元格视为NaN。 - Alex Ruiz

3
在这种情况下,我们会发现有一些列的值是NaN或为空,因此我们无法完成操作。因此,当您按照下面给出的代码应用时,它将起作用。
df_pcc_mod = df_pcc_mod[~df_pcc_mod['Invoice'].str.contains('Reversed',na=False)]

类型错误:一元~的操作数类型不正确:'float'。 - aryan aryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接