pd.to_numeric无法将字符串转换为浮点值

2024-06-28 19:38:45 发布

您现在位置:Python中文网/ 问答频道 /正文

def openfiles():
    file1 = tkinter.filedialog.askopenfilename(filetypes=(("Text Files",".csv"),("All files","*")))
    read_text=pd.read_csv(file1)
    displayed_file.insert(tk.END,read_text)
    read_text['OPCODE'] = pd.to_numeric(read_text['OPCODE'],errors = 'coerce').fillna(0.0)
    read_text['ADDRESS'] = pd.to_numeric(read_text['ADDRESS'],errors = 'coerce').fillna(0.0)
    classtype1=np.argmax(model.predict(read_text), axis=-1)
    tab2_display_text.insert(tk.END,read_text)

运行此代码时显示“无法将字符串转换为浮点”

用作数据帧的csv文件的链接:https://github.com/Yasir1515/Learning/blob/main/Book2%20-%20Copy.csv

完整的代码链接(问题代码在第118-119行):https://github.com/Yasir1515/Learning/blob/main/PythonApplication1.py


Tags: csvto代码textreadfile1tkopcode
2条回答

在您的数据中ADDRESS是十六进制数OPCODE是十六进制数的列表。我不知道你为什么要把十六进制数转换成浮点数。你应该把它们转换成整数

方法to_numeric不适合将十六进制字符串转换为整数,或处理十六进制数字列表。您需要编写帮助函数:

def hex2int(x):
  try:
    return int(x, 16)
  except:
    return 0

def hex_list2int_list(zz):
  return [hex2int(el) for el in zz.split()]

现在替换相关行:

read_text['OPCODE'] = read_text['OPCODE'].apply(hex_list2int_list)
read_text['ADDRESS'] = read_text['ADDRESS'].apply(hex2int)     

我查看您的CSV文件。列操作码包含一行,其中包含一些由空格(“”)分隔的数字组成的长字符串。因此,不能将该类型的值强制转换为数字类型(字符串“88 99 77 66”!=数字类型)。我可以建议一些解决方案,将列操作码中的许多值拆分为许多行,然后执行to_numeric方法,之后可以进行操作并将其返回到上一个表单。 我的建议是:

read_text=pd.read_csv(file1)

new_df = pd.concat([pd.Series(row['ADDRESS'], row['OPCODE'].split(' '))              
                    for _, row in a.iterrows()]).reset_index()
                    
new_df['OPCODE'] = pd.to_numeric(new_df['OPCODE'],errors = 'coerce').fillna(0.0)

相关问题 更多 >