2016-07-15 3 views
1

Я использую следующий код для заполнения NaN значения, а затем добавление столбца к DataFrame, который будет содержать количество значений в строке которые больше 0. Вот код:fillna() производит NaN значения

df.fillna(0, inplace=True) 
dfMin10 = df 
dfMin10['Sum'] = (dfMin10.iloc[1:len(dfMin10.columns)] > 0).sum(1) 
dfMin10 

Когда я вижу столбец Sum, я все еще вижу некоторые значения NaN. Почему это должно быть? Я предполагаю, что мой DataFrame (df) также имеет некоторые значения NaN даже после замены NaN.

Любые указатели будут высоко оценены.

ответ

3

Вы видите NaN в первой записи sum? Эта линия:

branchConceptsWithScoresMin10['Sum'] = (branchConceptsWithScoresMin10.iloc[1:len(branchConceptsWithScoresMin10.columns)] > 0).sum(1) 

Если это будет:

branchConceptsWithScoresMin10['Sum'] = (branchConceptsWithScoresMin10.iloc[0:len(branchConceptsWithScoresMin10.columns)] > 0).sum(1) 

Примечание индексации начиная с 0.

Пример:

df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z']) 
df.fillna(0, inplace=True) 
branchConceptsWithScoresMin10 = df 
# Your original code 
branchConceptsWithScoresMin10['Sum'] = (branchConceptsWithScoresMin10.iloc[1:len(branchConceptsWithScoresMin10.columns)] > 0).sum(1) 

# This should return 
# a b c d Sum 
# x 0 0 0 0 NaN 
# y 0 0 0 0 0.0 
# z 0 0 0 0 0.0 

branchConceptsWithScoresMin10['Sum'] = (branchConceptsWithScoresMin10.iloc[0:] > 0).sum(1) 

# There should not be any NaNs here. 
+0

Ты прав, я видел его в первой записи. Но я также вижу «NaN» в последних многих записях. Я не знаю, почему. – Patthebug

+0

Ах, я делал что-то глупое. IT должен был быть 'branchConceptsWithScoresMin10 ['Sum'] = (branchConceptsWithScoresMin10.iloc [0:]> 0) .sum (1)'. Теперь это работает. – Patthebug

+0

Взгляните на ваш dataframe, прежде чем делать сумму для строки, где вы получаете 'NaN', и это должно дать вам некоторую идею. Если вы разместите его в своем вопросе, мы можем попробовать и помочь. –

Смежные вопросы