【发布时间】:2019-03-27 05:32:13
【问题描述】:
我有一个 (2M, 23) 维 numpy 数组 X。它的 dtype 为<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)
我收到如上所示的错误。我正在尝试找到如何解决 '���' 的字符串格式错误。
这是什么意思(它叫什么?),我该如何解决这个错误?
编辑:有关如何读取数据的信息:-
导入相关包
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')
【问题讨论】:
-
您如何读取该数据?
�是 Unicode 替换字符,在使用错误代码页读取 ASCII 文本时使用。看起来源包含使用错误代码页读取的非数字数据。即使使用了正确的代码页,文本仍然是无效的 -
如果你是 Python 解释器,你会如何将
'���'转换为浮点数?那代表哪个数字?你想要的结果是什么? -
@PanagiotisKanavos:我使用
collect()方法从 pyspark 数据帧中读取它。 -
@zvone:完全正确!我希望我知道 URC(???) 以前是什么。所需的结果是浮点值的 numpy 数组。
标签: python numpy pyspark python-unicode