《python数据挖掘入门与实践》第五章的错误

了然 2016-09-29 03:19:12
代码:
import os
import pandas as pd
data_folder = os.path.join(os.path.expanduser("~"),"data","Ads")
data_filename = os.path.join(data_folder,"ad.data")
def convert_number(x):
try:
return float(x)
except ValueError:
return np.nan
from collections import defaultdict
converters = defaultdict(convert_number)
converters[1558] = lambda x:1 if x.strip() == "ad." else 0
ads = pd.read_csv(data_filename,header=None,converters=converters)
ads[:5]
x = ads.drop(1558,axis=1).values
y = ads[1558]
from sklearn.decomposition import PCA
pca = PCA(n_components=5)
xd = pca.fit_transform(x)
import numpy as np
np.set_printoptions(precision=3,suppress=True)
pca.explained_variance_ratio_

错误信息:
ValueError                                Traceback (most recent call last)
<ipython-input-10-f726f2ff6f29> in <module>()
1 from sklearn.decomposition import PCA
2 pca = PCA(n_components=5)
----> 3 xd = pca.fit_transform(x)
4 import numpy as np
5 np.set_printoptions(precision=3,suppress=True)

/home/kongnian/anaconda3/lib/python3.5/site-packages/sklearn/decomposition/pca.py in fit_transform(self, X, y)
239
240 """
--> 241 U, S, V = self._fit(X)
242 U = U[:, :self.n_components_]
243

/home/kongnian/anaconda3/lib/python3.5/site-packages/sklearn/decomposition/pca.py in _fit(self, X)
266 requested.
267 """
--> 268 X = check_array(X)
269 n_samples, n_features = X.shape
270 X = as_float_array(X, copy=self.copy)

/home/kongnian/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
371 force_all_finite)
372 else:
--> 373 array = np.array(array, dtype=dtype, order=order, copy=copy)
374
375 if ensure_2d:

ValueError: could not convert string to float: '?'

数据集:
http://archive.ics.uci.edu/ml/datasets/Internet+Advertisements download Advertisements dataset
操作系统信息:
Linux ubuntu 4.4.0-40-generic #60-Ubuntu SMP Fri Sep 23 16:45:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
...全文
561 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_40837600 2020-02-07
  • 打赏
  • 举报
回复
原因:数据集内有含有空格的字符 解决方案: #将Dataframe中的所有异常字符换成nan(参照报错信息) ads = ads.replace("?",np.nan).replace(" ?",np.nan).replace(" ?",np.nan) 再次转化数据类型 ads = ads.astype(float).dropna() 确认数据: ads.dtypes #转换成功
flybird101 2018-01-31
  • 打赏
  • 举报
回复
我的做法: from collections import defaultdict converters = defaultdict(convert_number) for i in ads.columns[:-1]: converters[i] = convert_number converters[1558] = lambda x: 1 if x.strip() == "ad." else 0 ads = pd.read_csv(data_filename, header=None, converters=converters) ads = ads.dropna(axis=0, how='any') ads[:100]
姜红杰 2017-08-21
  • 打赏
  • 举报
回复
人呢,咋解决的
sammy_cc 2017-06-18
  • 打赏
  • 举报
回复
引用 1 楼 sinat_30665603 的回复:
可能是你的数据预处理问题 预处理后的数据有字符串。
请教一下如何解决的
枭亭 2017-04-05
  • 打赏
  • 举报
回复
我也遇到了同样的问题,求解决方法
zzz47896 2017-03-19
  • 打赏
  • 举报
回复
怎么解决的啊
baidu_31803731 2016-12-14
  • 打赏
  • 举报
回复
楼主怎么解决的,求解
了然 2016-10-19
  • 打赏
  • 举报
回复
此问题已解决
斯温jack 2016-10-10
  • 打赏
  • 举报
回复
可能是你的数据预处理问题 预处理后的数据有字符串。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧