ValueError: nu s-a putut converti șirul în float: ' ��� '

Am un (2M, 23) dimensional numpy matrice X. Are un tip de <U26, adică șir unicode de 26 de caractere.

array([["143347", "1325", "28.19148936", ..., "61", "0", "0"], ["50905", "0", "0", ..., "110", "0", "0"], ["143899", "1325", "28.80434783", ..., "61", "0", "0"], ..., ["85", "0", "0", ..., "1980", "0", "0"], ["233", "54", "27", ..., "-1", "0", "0"], ["���", "�", "�����", ..., "�", "��", "���"]], dtype="<U26") 

Când îl convertesc într-un tip de date float, folosind

X_f = X.astype(float) 

Am primit eroarea așa cum se arată mai sus. cum se rezolvă această eroare de formatare a șirului pentru „���”?

Îmi dau seama că unele caractere nu sunt citite corect în cadrul de date, iar caracterul de înlocuire unicode este doar un rezultat al acestuia.

Întrebările mele: –

  1. Cum mă descurc cu această lectură greșită?
  2. Ar trebui să ignor aceste caractere? Sau ar trebui să le transform la zero poate?

Informații suplimentare despre modul în care au fost citite datele: –

importarea pachetelor relevante

from pyspark import SparkContext from pyspark.sql import SQLContext from pyspark.sql.functions import col 

încărcarea setului de date într-un cadru de date pyspark

def loading_data(dataset): dataset=sql_sc.read.format("csv").options(header="true", inferSchema="true").load(dataset) # #changing column header name dataset = dataset.select(*[col(s).alias("Label") if s == " Label" else s for s in dataset.columns]) #to change datatype dataset=dataset.drop("External IP") dataset = dataset.filter(dataset.Label.isNotNull()) dataset=dataset.filter(dataset.Label!=" Label")#filter Label from label print(dataset.groupBy("Label").count().collect()) return dataset # invoking ds_path = "../final.csv" dataset=loading_data(ds_path) 

verificați tipul de set de date.

type(dataset) 

pyspark.sql.dataframe.DataFrame

convertiți în np tablou

import numpy as np np_dfr = np.array(data_preprocessing(dataset).collect()) 

divizați caracteristicile și etichetele

X = np_dfr[:,0:22] Y = np_dfr[:,-1] 

arată X

>> X array([["143347", "1325", "28.19148936", ..., "61", "0", "0"], ["50905", "0", "0", ..., "110", "0", "0"], ["143899", "1325", "28.80434783", ..., "61", "0", "0"], ..., ["85", "0", "0", ..., "1980", "0", "0"], ["233", "54", "27", ..., "-1", "0", "0"], ["���", "�", "�����", ..., "�", "��", "���"]], dtype="<U26") 

Răspuns

Deși nu este cea mai bună soluție, am găsit ceva succes transformându-l în cadru de date pandas și lucrează împreună.

fragment de cod

# convert X into dataframe X_pd = pd.DataFrame(data=X) # replace all instances of URC with 0 X_replace = X_pd.replace("�",0, regex=True) # convert it back to numpy array X_np = X_replace.values # set the object type as float X_fa = X_np.astype(float) 

intrare

array([["85", "0", "0", "1980", "0", "0"], ["233", "54", "27", "-1", "0", "0"], ["���", "�", "�����", "�", "��", "���"]], dtype="<U5") 

ieșire

array([[ 8.50e+01, 0.00e+00, 0.00e+00, 1.98e+03, 0.00e+00, 0.00e+00], [ 2.33e+02, 5.40e+01, 2.70e+01, -1.00e+00, 0.00e+00, 0.00e+00], [ 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00]]) 

Răspuns

Să încercăm să folosim cadru de date pandas și converti șirurile în clase numerice

apelează funcția convert () de mai sus ca, test = convert (test)

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *