2016-04-06 16 views
0

Matris oluşturmak için patsy kullanıyorum. Ancak, veri kümesinde Yok veya Nan değerleri olduğunda garip davranışı alıyorum. Aşağıda görüldüğü gibi, Yok satırını bırakmak yerine, 1'ler ve 0'larla ek sütunlar oluşturur. Bir Yok değerini eklediğinizde Bir Yok değerini eklediğimde neden patsy ek sütun döndürüyor?

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)) 

Neden kurban ek sütunlar dönüyor? Doğru anlaşılır Eğer öyleyse panda dataframe object olarak bu sütunu alır None nan olarak

cevap

1

, numpy dizi tedavi etmez. Sayısal bir sütun olmadığı için patsy, kategorik bir değişken için bir matris yapmaya çalışıyor.

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

Ya da sadece Yok yerine np.nan geçebilir:

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

Sonucu olacaktır:

(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)) 

Sen np.array atlayıp ile matris oluşturmak Ya

+0

Teşekkürler, ikinci cevap şöyle olmalı: df = pd.DataFrame (np.array ([(1,3), (2,6), (4,2), (6, np.nan)]) , sütunlar = [ 'y', 'X']) NameError atar: 'nan' ismi tanımlanmamış – user1181337

+0

Haklısınız, Canopy bunları otomatik olarak içe aktarır, bu yüzden bazen np'yi dahil etmeyi unutmayın. Şimdi düzenleniyor. – ayhan

İlgili konular