2016-08-28 3 views
0

У меня есть набор данных, в котором я выполняю анализ основных компонентов (PCA). Я получаю сообщение ValueError, когда пытаюсь преобразовать данные. Ниже приведены некоторые из кода:pandas dataframe fillna() не работает?

import pandas as pd 
import numpy as np 
import matplotlib as mpl 
from sklearn.preprocessing import StandardScaler 
from sklearn.decomposition import PCA as sklearnPCA 

data = pd.read_csv('test.csv',header=0) 
X = data.ix[:,0:1000].values # values of 1000 predictor variables 
Y = data.ix[:,1000].values  # values of binary outcome variable 
sklearn_pca = sklearnPCA(n_components=2) 
X_std = StandardScaler().fit_transform(X) 

Именно здесь я получаю следующее сообщение об ошибке:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64'). 

Так я тогда проверил исходный набор данных, был ли какое-либо значение NaN:

print(data.isnull().values.any()) # prints True 
data.fillna(0)      # replace NaN values with 0 
print(data.isnull().values.any()) # prints True 

Я не понимаю, почему все еще печатает True даже после того, как я заменил значения NaN на 0.

ответ

0

Вы должны заменить данные на возвращаемый объект из fillna

Малый репродуктор:

import pandas as pd 

data = pd.DataFrame(data=[0,float('nan'),2,3]) 

print(data.isnull().values.any()) # prints True 
data = data.fillna(0)      # replace NaN values with 0 
print(data.isnull().values.any()) # prints False now :) 
0

Есть два способа добиться, попробуйте заменить на месте:

data.fillna(0, inplace=True) 

Или, использование вернулся объект:

data1 = data.fillna(0) 
Смежные вопросы