TypeError:&:'str'和'str'不支持的操作数类型

Posted

技术标签:

【中文标题】TypeError:&:\'str\'和\'str\'不支持的操作数类型【英文标题】:TypeError: unsupported operand type(s) for &: 'str' and 'str'TypeError:&:'str'和'str'不支持的操作数类型 【发布时间】:2018-12-06 14:42:32 【问题描述】:

我的函数收到以下 Traceback 错误:

TypeError: unsupported operand type(s) for &: 'str' and 'str'

这是我的代码:

def age():
    thirties_df = (df.loc[df['age'] <= 39]) & (df.loc[df['age'] >= 30])
    fourties_df = (df.loc[df['age'] <= 49]) & (df.loc[df['age'] >= 40])
    fifties_df = (df.loc[df['age'] <= 59]) & (df.loc[df['age'] >= 50])
    sixties_df = (df.loc[df['age'] <= 69]) & (df.loc[df['age'] >= 60])
    seventies_df = (df.loc[df['age'] <= 79]) & (df.loc[df['age'] >= 70])
    eighties_df = (df.loc[df['age'] <= 89]) & (df.loc[df['age'] >= 80])
    for i in thirties_df, fourties_df, fifties_df, sixties_df, 
    \ seventies_df, eighties_df: 

【问题讨论】:

我不知道 pandas,但您可能需要稍微移动一下括号。 【参考方案1】:

该错误与您在实例化这些变量时使用的可疑“&”字符有关。(这两个字符串之间的“&”仅表示错误)

也没有意义把and (我想你试图把这个) 字符串之间,因为最后一个赋值被用作该变量的值。 看到这个:-

>>> var = 'str1' and 'str2'
>>> var
'str2'

【讨论】:

感谢您的回复。 '&' 符号的原因是表示 df['age'] 既高于又低于给定范围的情况。如果你说这不是我想要的,你知道更好的方法吗? @bullybear17 这里的 df 是什么? df 是我导入的一个 csv,其中包含多个列,如“状态”、“性别”、“种族”、“年龄”。我用这个人的名字索引了 csv。使用这个特定的函数,我想为列“年龄”返回 x 和 y 之间的任何值。例如,thirties_df 将是一个变量,我可以在其中存储 csv 中年龄在 30 到 39 岁之间的人的所有信息 @bullybear17 到目前为止,我还没有读到关于 csv 的文章;但我很确定单个变量不能同时存储两个值。但是您可以尝试将该范围存储在列表或元组之类的序列中。【参考方案2】:

没有df 很难说,但看起来您的年龄列是字符串。并且括号放错了位置:df['age'] &lt;= 39 是一系列 dtype bool。并且 2 系列 bool 的 & 本身就是一个系列 bool,您可以使用它对 DataFrame (如果它具有正确的长度)进行选择

df = pd.DataFrame(
    map(str, np.random.randint(5, 90, size=1000)),
    columns=('age',)
)  # what I think your df roughly looks like.
df['age'] = df['age'].astype('int')  # make sure age is numeric
# building thirties_df step by step
younger_than_forty = df['age'] <= 39
older_than_thirty = df['age'] >= 30
thirties_df = df[younger_than_forty & older_than_thirty]
# or all at once and using loc like in your question
thirties_df = df.loc[(df['age'] <= 39) & (df['age'] >= 30)]
# or using between
thirties_df = df[df['age'].between(30, 39)]

# because
assert all(df['age'].between(30, 39) == younger_than_forty & older_than_thirty)

# so age could become something like
def age(df):
    min_age = 30
    max_age = 80
    buckets = (
        df[df["age"].between(n, n + 9)]
        for n in range(min_age, max_age + 1, 10)
    )
    for i in buckets:
        print(i)

【讨论】:

以上是关于TypeError:&:'str'和'str'不支持的操作数类型的主要内容,如果未能解决你的问题,请参考以下文章

使用kqueue的str_cli函数

TypeError:不支持的操作数类型/:'str'和'str'

TypeError:不支持的操作数类型/:'str'和'str'django setting.py

StringUtils中 isNotEmpty 和isNotBlank的区别java字符串判空

StringUtils中 isNotEmpty 和isNotBlank的区别java字符串判空

Spark - TypeError:'str'和'int'的实例之间不支持'<='