1. ホーム
  2. python

TypeError: 'str' と 'float' のインスタンスの間で '>' がサポートされていない。

2022-02-21 17:59:53
<パス

目次

意味

浮動小数点と文字列を比較できないタイプエラーです。

発生理由

このタイプのエラーが発生し、現在以下の2つのケースが発生しています。

** 2列のExcelデータに対して、辞書キーとキー値の対応演算を行う場合、キー値列のデータが浮動小数点型と文字列型の両方で存在する場合。**


コード表示

import xlrd
f1 = xlrd.open_workbook('wordcount_test.xlsx')
# Get the names of the sheets in Excel, here we just get the first sheet
name = f1.sheet_names()[0]
# Select the specified sheet for operation
sheet = f1.sheet_by_name(name)
words_list_tem=sheet.col_values(0)
words_list=[str(i) for i in words_list_tem]
counts_list=sheet.col_values(1)
cipin_dict = dict(zip(words_list,counts_list)) # convert to dictionary for speedup


を実行すると、クラスエラーが報告されます。

外観の主な理由

B列はすべて浮動小数点型であるべきですが、実は読み取ったデータは文字列型として存在し、その文字列を print([type(i) for i in count_list]) 列のデータ型を確認します。最後のチェックで、誤ってセルに入力されたエクセルが見つかり、エクセルの読み込みでは、最も長いセルの位置に応じて列の長さが計算され、空のセルには自動的に文字列型が埋められます

" "

状況1是正措置

余分なセルを削除するだけです。冗長な文字列型は、実は空セルで " " 有効なデータセル以外のデータを削除することで、文字列の長さを正常に戻すことができます。

次に、input()が返すデータ型はstrであり、整数と直接比較することはできない。

ID = input("Please enter your student number: ") #input() returns a string type
if ID % 3==0:
    result_1 = (ID / 3)**3
    print(result_1)
elif ID % 3==1:
    result_2 = ID // 3
    print(result_2)
else:
    result_3 = (ID-(ID // 3)*3)**2
    print(result_3)

ID = float(input("Please enter your school number: "))
if ID % 3==0:
    result_1 = (ID / 3)**3
    print(result_1)
elif ID % 3==1:
    result_2 = ID // 3
    print(result_2)
else:
    result_3 = (ID-(ID // 3)*3)**2
    print(result_3)


状況2是正措置

ID = float(input("Please enter your school number: "))
if ID % 3==0:
    result_1 = (ID / 3)**3
    print(result_1)
elif ID % 3==1:
    result_2 = ID // 3
    print(result_2)
else:
    result_3 = (ID-(ID // 3)*3)**2
    print(result_3)