我需要在这个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
检查列的类型。
是否有可能您测试的列之一包含字符串而不是数字?这就解释了抛出的错误。一个好的调试步骤是在循环开始时打印列名,以查看在哪个迭代中失败。