我只需要在此 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
什么是正確的語法?謝謝
uj5u.com熱心網友回復:
您的一列或部分列具有非數字值。如果您確定所有列都應該是數字,請使用
df2[column_name] = pandas.to_numeric(df2[column_name])
確保沒有數字字串,如“123”,混合在那里。
uj5u.com熱心網友回復:
首先,你的語法是正確的。該錯誤與型別有關。似乎您的某些列中包含字串而不是數字,這在與數字進行比較時會導致此錯誤。您可以使用 來檢查列的型別df2.dtypes。
uj5u.com熱心網友回復:
您測驗的其中一列是否可能包含字串而不是數字?這將解釋拋出的錯誤。一個好的除錯步驟是在回圈開始時列印列名,以查看它在哪個迭代中失敗。
uj5u.com熱心網友回復:
您的 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337857.html
上一篇:將串列和字串連接成四個元素的元組
