类型错误:预期的二进制或 unicode 字符串,得到 618.0 [英] TypeError: Expected binary or unicode string, got 618.0

查看:58
本文介绍了类型错误:预期的二进制或 unicode 字符串,得到 618.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

import os
import sys

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import clear_output
from six.moves import urllib

import tensorflow.compat.v2.feature_column as fc
import tensorflow as tf

ss1517 是我的数据集的名称.它是一个 CSV 文件,有 4116 行和 20 列,并且有很多 NaN 值(没有没有 NaN 值的列)

ss1517 is the name of my dataset. It is a CSV file with 4116 rows and 20 columns and has lots of NaN values( There is no column that hasn't NaN value)

traindata = ss1517.iloc[0:2470,:] # 60 % of my dataset is splitted by training set
evaldata = ss1517.iloc[2470:4116, :] # 40 % of my dataset is splitted by eval set
ytrain = traindata.pop("AvgOfMajor N")
yeval = evaldata.pop("AvgOfMajor N")

CATEGORICAL_COLUMNS 是我的数据集中的分类列.
NUMERIC_COLUMNS 是我数据集中的数字列.

CATEGORICAL_COLUMNS are the categorical columns in my dataset.
NUMERIC_COLUMNS are the numeric columns in my dataset.

CATEGORICAL_COLUMNS = ['Location Name', 'Location Code', 'Borough', 'Register', 'Building Name', 'Schools in Building', 'ENGroupA', 'RangeA']
NUMERIC_COLUMNS = ['Geographical District Code', '# Schools', 'Major N', 'Oth N', 'NoCrim N', 'Prop N', 'Vio N', 'AvgOfOth N', 'AvgOfNoCrim N', 'AvgOfProp N', 'AvgOfVio N']

feature_columns = []#Sadece linear regression'u eğitmek için kullanıyoruz
for feature_name in CATEGORICAL_COLUMNS:
  vocabulary = traindata[feature_name].unique()
  feature_columns.append(tf.feature_column.categorical_column_with_vocabulary_list(feature_name, vocabulary))
for feature_name in NUMERIC_COLUMNS:
  feature_columns.append(tf.feature_column.numeric_column(feature_name, dtype=tf.float32))

def make_input_fn(data_df, label_df, num_epochs=10, shuffle=True, batch_size=32):
  def input_function():# inner function, this will be returned.
    ds = tf.data.Dataset.from_tensor_slices((dict(data_df), label_df)) # Create tf.data.Dataset object with data and its label
    if shuffle:
      ds = ds.shuffle(1000) # randomize order of data
    ds = ds.batch(batch_size).repeat(num_epochs)
    return ds # return a batch of dataset
  return input_function # return the input_function

train_input_fn = make_input_fn(traindata, ytrain) 
eval_input_fn = make_input_fn(evaldata, yeval, num_epochs=1, shuffle=False) 

linear_est = tf.estimator.LinearClassifier(feature_columns=feature_columns)
linear_est.train(train_input_fn) #train
result = linear_est.evaluate(eval_input_fn) #get model metrics/stats by testing on testing data

clear_output() #clears console output
print(result["accuracy"]) #the result variable is simply dict of stats about our model

每次我尝试用 df.fillna(method=ffill") 填充 NaN 值时,我都会遇到这个错误(TypeError: Expected binary or unicode string, got 618.0) df.fillna(method=bfill")df.fillna(value = 0)df.fillna(value="随机字符串值).我还尝试使用 df.dropna()
删除 NaN 值不用说,当我尝试使用 NaN 值运行我的代码时,它无法工作.
我有两个问题.
第一个,我如何处理我的 NaN 值,以便将来我不会看到这个错误(TypeError: Expected binary or unicode string, got 618.0)?
第二个,我怎样才能摆脱这个错误并迅速将我的数据集实现到这个模型中?
P.S.:我很肯定我没有打错任何字.

I have this error(TypeError: Expected binary or unicode string, got 618.0) every time I tried to fill the NaN values with df.fillna(method="ffill") , df.fillna(method="bfill") , df.fillna(value = 0), ordf.fillna(value="randomstringvalues). I also tried to drop the NaN values with df.dropna()
Needless to say, when I tried to run my code with NaN values it couldn't work.
I have two questions.
The first one, how could I handle my NaN values so that I won't see this error (TypeError: Expected binary or unicode string, got 618.0) in the future?
The second one, how can I get rid of this error and implement my dataset into this model swiftly?
P.S.: I am positive that I did not make any typos.

推荐答案

我的猜测是您的数据中有一些非 unicode 字符.非 unicode 字符是这样的: ä

MY guess is that you have some non-unicode characters in your data. Non unicode characters are like this: � ä

任何不是字母、数字或符号的东西.你在这里有两个选择,找到所有这些字符和替换 用其他东西或删除它们.

anything that is not a letter, number or symbol. you have two options here, to find all these characters and replace them with something else or remove them.

或者您可以在读取 csv 文件时使用正确的编码.pandas.read_csv

Or you can use a proper encoding when reading the csv file. pandas.read_csv

data = pandas.read_csv(myfile, encoding='utf-8', quotechar='"', delimiter=',') 

这篇关于类型错误:预期的二进制或 unicode 字符串,得到 618.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆