Почему Пэтси возвращает дополнительные столбцы, когда я добавляю значение None?

Я использую Patsy для создания матриц. Но я получаю странное поведение, когда значения None или Nan находятся в наборе данных. Как показано ниже, вместо простого удаления строки None создаются дополнительные столбцы с 1 и 0.

import numpy as np
import pandas as pd
import patsy as pt

df = pd.DataFrame(np.array([(1,3),(2,6),(4,2),(6,3)]), columns=['y','X'])
In[60]: df
Out[60]: 
   y  X
0  1  3
1  2  6
2  4  2
3  6  3
In[61]: pt.dmatrices('y ~ X', df)
Out[61]: 
(DesignMatrix with shape (4, 1)
   y
   1
   2
   4
   6
   Terms:
     'y' (column 0),
 DesignMatrix with shape (4, 2)
   Intercept  X
           1  3
           1  6
           1  2
           1  3
   Terms:
     'Intercept' (column 0)
     'X' (column 1))
In[62]: df = pd.DataFrame(np.array([(1,3),(2,6),(4,2),(6,None)]), columns=['y','X'])
In[63]: pt.dmatrices('y ~ X', df)
Out[63]: 
(DesignMatrix with shape (3, 4)
   y[1]  y[2]  y[4]  y[6]
      1     0     0     0
      0     1     0     0
      0     0     1     0
   Terms:
     'y' (columns 0:4),
 DesignMatrix with shape (3, 3)
   Intercept  X[T.3]  X[T.6]
           1       1       0
           1       0       1
           1       0       0
   Terms:
     'Intercept' (column 0)
     'X' (columns 1:3))

Почему Пэтси возвращает дополнительные столбцы, когда я добавляю значение None?

1 ответ

Если я правильно понял, numpy array не лечит None как nan поэтому датафрейм панды принимает этот столбец как object, Поскольку это не числовой столбец, Пэтси пытается создать матрицу для категориальной переменной.

Вы можете пропустить np.array и построить матрицу с помощью:

df = pd.DataFrame([(1,3),(2,6),(4,2),(6,None)], columns=['y','X'])

Или вы можете просто пройти np.nan вместо None:

df = pd.DataFrame(np.array([(1,3),(2,6),(4,2),(6,np.nan)]), columns=['y','X'])

Результат будет:

(DesignMatrix with shape (3L, 1L)
   y
   1
   2
   4
   Terms:
     'y' (column 0),
 DesignMatrix with shape (3L, 2L)
   Intercept  X
           1  3
           1  6
           1  2
   Terms:
     'Intercept' (column 0)
     'X' (column 1))
Другие вопросы по тегам