Почему Пэтси возвращает дополнительные столбцы, когда я добавляю значение 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))