我是Python编程的新手。当我尝试标准化主成分分析的数据时,我收到以下错误消息。
Python版本:2.7.4。
df = pd.read_csv('E:/Downloads/Datasets/PCA_data.csv')
df.head()
number_people date timestamp day_of_week \
0 37 2015-08-14 17:00:11-07:00 61211 4
1 45 2015-08-14 17:20:14-07:00 62414 4
2 40 2015-08-14 17:30:15-07:00 63015 4
3 44 2015-08-14 17:40:16-07:00 63616 4
4 45 2015-08-14 17:50:17-07:00 64217 4
is_weekend is_holiday temperature is_start_of_semester \
0 0 0 71.76 0
1 0 0 71.76 0
2 0 0 71.76 0
3 0 0 71.76 0
4 0 0 71.76 0
is_during_semester month hour
0 0 8 17
1 0 8 17
2 0 8 17
3 0 8 17
4 0 8 17
x = df.iloc[:,1:8] # all rows, all the features and no labels
y = df.iloc[:, 0] # all rows, label only
# Scale the data to be between -1 and 1
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(x)
X
X = scaler.fit_transform(x)
Traceback (most recent call last):
File "<ipython-input-28-ce4e52c57a0a>", line 1, in <module>
X = scaler.fit_transform(x)
File "C:\Users\owner\Anaconda2\lib\site-packages\sklearn\base.py", line 494, in fit_transform
return self.fit(X, **fit_params).transform(X)
File "C:\Users\owner\Anaconda2\lib\site-packages\sklearn\preprocessing\data.py", line 560, in fit
return self.partial_fit(X, y)
File "C:\Users\owner\Anaconda2\lib\site-packages\sklearn\preprocessing\data.py", line 583, in partial_fit
estimator=self, dtype=FLOAT_DTYPES)
File "C:\Users\owner\Anaconda2\lib\site-packages\sklearn\utils\validation.py", line 382, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: invalid literal for float(): 2017-03-18 19:22:51-07:00
请有人可以调查一下......很多人提前感谢。
答案 0 :(得分:0)
date
列是一个字符串,没有数值,因此您不应该缩放它。此外,您也不应该考虑timestamp
列,因为它是一个不断增加的值,您不会从PCA获得任何有意义的信息。
因此我建议你这样做:
x = df.iloc[:,3:8] # all rows, except label, date and timestamp
答案 1 :(得分:0)
StandardScaler只能调整/转换浮动类型,如StandardScaler.partial_fit中check_array
与dtype=FLOAT_DTYPES
的调用所述。
如果您打算将其包含在分析中,则需要排除日期列或将其转换为浮动格式(unix时间戳)。虽然我建议不要将时间作为一个功能完全包含在内。
NB 您还有timestamp
列,虽然StandardScaler
能够被{{1}}转换,但也应排除在您的数据之外。