我有一个 (2M, 23) 维numpy
数组X
。它的数据类型为<U26
,即 26 个字符的 unicode 字符串。
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')
当我将其转换为浮点数据类型时,使用
X_f = X.astype(float)
我收到如上所示的错误。如何解决“���”的字符串格式错误?
我意识到数据框中的某些字符没有被正确读取,而 unicode 替换字符只是它的结果。
我的问题:-
- 我该如何处理这种误读?
- 我应该忽略这些字符吗?或者我应该将它们转换为零吗?
有关如何读取数据的其他信息:-
导入相关包
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')