ValueError : 문자열을 부동 소수점으로 변환 할 수 없음 : ' ��� '

(2M, 23) 차원 numpy 배열 X이 있습니다. dtype은 <U26, 즉 26 자의 유니 코드 문자열입니다.

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") 

float 데이터 유형,

X_f = X.astype(float) 

위와 같은 오류가 발생합니다. “…”에 대한이 문자열 형식화 오류를 해결하는 방법은 무엇입니까?

일부 문자는 데이터 프레임에서 제대로 읽히지 않으며 유니 코드 대체 문자는 그 결과 일뿐입니다.

내 질문 :-

  1. 이 오독을 어떻게 처리합니까?
  2. 이러한 문자를 무시해야합니까? 아니면 0으로 변환해야합니까?

데이터를 읽는 방법에 대한 추가 정보 :-

관련 패키지 가져 오기

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

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) 

데이터 세트 유형을 확인하세요.

type(dataset) 

pyspark.sql.dataframe.DataFrame

np로 변환 배열

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

분할 기능 및 레이블

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

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") 

Answer

최상의 솔루션은 아니지만 pandas 데이터 프레임으로 변환하여 성공을 거두었습니다.

코드 스 니펫

# 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) 

입력

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

출력

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]]) 

Answer

Pandas 데이터 프레임을 사용해 보겠습니다. 문자열을 숫자 클래스로 변환

위의 convert () 함수를 test = convert (test)

와 같이 호출합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다