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'] <= 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'不支持的操作数类型的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:不支持的操作数类型/:'str'和'str'
TypeError:不支持的操作数类型/:'str'和'str'django setting.py
StringUtils中 isNotEmpty 和isNotBlank的区别java字符串判空