Python类型错误:一元数的操作数类型错误:'float'

2024-03-29 10:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在几周前就把下面的代码放在一起了,它按预期工作,但现在当我回去运行它时,我得到了一个错误

import pandas as pd
import numpy as np
file1 = "List - raw .csv"
df = pd.read_csv(file1)
pd.options.display.float_format = '{:,.2f}'.format 

df.loc[~df['Ship To Customer Zip'].str.contains('[A-Za-z]'), 'ZipCleaned'] = df['Ship To Customer Zip'].str.slice(stop=5)

Error: Traceback (most recent call last): File "", line 1, in File "C:\users...Python\Python37-32\lib\site-packages\pandas\core\generic.py", line 1541, in invert arr = operator.inv(com.values_from_object(self)) TypeError: bad operand type for unary ~: 'float'

代码在几天前按预期工作。我还检查了备份代码,它生成了相同的错误


Tags: csvto代码importformatpandasdfas
2条回答

1)尝试更新pandas库c:/>pip install upgrade pandas

2)存在NaN值。。。尝试添加参数na=False

import pandas as pd
import numpy as np
file1 = "List - raw .csv"
df = pd.read_csv(file1)
pd.options.display.float_format = '{:,.2f}'.format 

df.loc[~df['Ship To Customer Zip'].str.contains('[A-Za-z]'), 'ZipCleaned', na=False] = df['Ship To Customer Zip'].str.slice(stop=5)

错误的意思是,您正在浮点值上使用按位一元运算符~,而它不支持浮点值

在这种情况下,该浮点值可能是一个NaN

您确定数据源(csv文件)没有更改吗

我用这个做了测试

In [1]: import pandas as pd                                                     

In [2]: import numpy as np                                                      

In [3]: s1 = pd.Series(['Mouse', 'dog', 'house and parrot', '23', np.NaN])      

In [4]: s1.str.contains('og')                                                   
Out[4]: 
0    False
1     True
2    False
3    False
4      NaN
dtype: object

In [5]:  ~s1.str.contains('og', regex=False)                                    
                                     -
TypeError                                 Traceback (most recent call last)
<ipython-input-5-9be2b1fdd8c9> in <module>
  > 1 ~s1.str.contains('og', regex=False)

~/tmp/test/venv/lib/python3.7/site-packages/pandas/core/generic.py in __invert__(self)
   1539     def __invert__(self):
   1540         try:
-> 1541             arr = operator.inv(com.values_from_object(self))
   1542             return self.__array_wrap__(arr)
   1543         except Exception:

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

In [6]: s1 = pd.Series(['Mouse', 'dog', 'house and parrot', '23'])              

In [7]: ~s1.str.contains('og', regex=False)                                     
Out[7]: 
0     True
1    False
2     True
3     True
dtype: bool

In [8]:  

请注意,当我在系列中使用np.NaN时,我得到了与您相同的错误,但是当我删除它时,它就工作了

所以是的,你的代码很好,你的数据源改变了

相关问题 更多 >