【问题标题】:Pandas Python - TypeError: bad operand type for unary ~: 'float'Pandas Python - TypeError:一元操作数类型错误〜:'float'
【发布时间】:2020-01-06 21:41:38
【问题描述】:

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

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)

错误: 回溯(最近一次通话最后): 文件“”,第 1 行,在 invert 中的文件“C:\users...Python\Python37-32\lib\site-packages\pandas\core\generic.py”,第 1541 行 arr = operator.inv(com.values_from_object(self)) TypeError: 一元操作数类型错误 ~: 'float'

代码在几天前按预期工作。我也有我检查过的备份代码,它产生了同样的错误。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    1) 尝试更新熊猫库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)
    

    【讨论】:

    • 谢谢何塞。我已经尝试过更新 pandas 但并没有解决问题。
    【解决方案2】:

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

    在这种情况下,这个浮点值可能是 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 时,我遇到了与您相同的错误,但是当我删除它时,它就起作用了

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

    【讨论】:

    • 谢谢,问题出在数据格式上。我不太明白,因为我认为 CSV 文件从来没有保持任何格式。
    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2019-07-11
    • 2019-01-27
    • 2015-01-06
    • 1970-01-01
    相关资源
    最近更新 更多