返回一个Python列表中等于或小于6的数字



我需要在这个FOR中返回每列中等于或小于6的值。

colunas = list(df2.columns[8:19])
colunas
['Satisfação geral',
'Comunicação',
'Expertise da industria',
'Inovação',
'Parceira',
'Proatividade',
'Qualidade',
'responsividade',
'Pessoas',
'Expertise técnico',
'Pontualidade']
lista = []
for coluna in colunas:
nome_coluna = coluna
#total_parcial = df2[coluna].count()
df2.loc[df2[coluna]<=6].shape[0]
percentual = df2[coluna].count() / df2[coluna].count()
lista.append([nome_coluna,total_parcial,percentual])
df_new = pd.DataFrame(data=lista, columns=['nome_coluna','total_parcial','percentual'])


返回错误

TypeError                                 Traceback (most recent call last)
<ipython-input-120-364994f742fd> in <module>()
4    nome_coluna = coluna
5    #total_parcial = df2[coluna].count()
----> 6    df2.loc[df2[coluna]<=6].shape[0]
7    percentual = df2[coluna].count() / df2[coluna].count()
8    lista.append([nome_coluna,total_parcial,percentual])
3 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/ops/array_ops.py in comp_method_OBJECT_ARRAY(op, x, y)
54         result = libops.vec_compare(x.ravel(), y.ravel(), op)
55     else:
---> 56         result = libops.scalar_compare(x.ravel(), y, op)
57     return result.reshape(x.shape)
58 
pandas/_libs/ops.pyx in pandas._libs.ops.scalar_compare()
TypeError: '<=' not supported between instances of 'str' and 'int'

如果我把给出错误的代码单独放在一行中,它会起作用

df2.loc[df2['Pontualidade'] <= 6].shape[0]
1537

正确的语法是什么?由于

您的DataFrame的一个列包含字符串,而不是数字。如果每一列都应该是数字,你可以通过在比较的左侧添加.astype(float)来将行转换为数字,即

df2.loc[df2[coluna].astype(float)<=6].shape[0]
# Will return the number of rows with values less than or equal to 6

如果它们是整数,也可以使用.astype(int)。注意,如果列包含不能转换为数字的值,这两种方法都将抛出错误。无论如何,最好找出为什么您期望的数字列不在代码的前面。

作为题外,由于比较将返回一系列布尔值,您可以通过简单地取布尔值的和来简化和澄清代码,即

(df2[coluna].astype(float)<=6).sum()
# Will also return the number of rows with values less than or equal to 6

您的一个或几个列具有非数值值。如果确定所有列都应该是数字,则使用df2[column_name] = pandas.to_numeric(df2[column_name])

以确保没有数字字符串,如"123"混合在那里。

首先,这里的语法是正确的。错误与类型有关。似乎有些列中有字符串而不是数字,这将导致与数字比较时出现此错误。您可以使用df2.dtypes检查列的类型。

是否有可能您测试的列之一包含字符串而不是数字?这就解释了抛出的错误。一个好的调试步骤是在循环开始时打印列名,以查看在哪个迭代中失败。

相关内容

  • 没有找到相关文章

最新更新