Joris'in cevabına bir yorum yazdın:
"Tek satırların bir seriye dönüştürülmesine yönelik tasarım kararını anlamıyorum - neden tek satırlı bir veri çerçevesi olmasın?"
Tek bir satır, Serilerde dönüştürülmez .
Bir Dizidir :No, I don't think so, in fact; see the edit
Pandaların veri yapıları hakkında düşünmenin en iyi yolu, daha düşük boyutlu veriler için esnek kaplar olarak kullanmaktır. Örneğin, DataFrame, Series için bir konteynerdir ve Panel, DataFrame nesneleri için bir konteynerdir. Bu kaplardan nesneleri sözlük benzeri bir şekilde ekleyip çıkarabilmek istiyoruz.
http://pandas.pydata.org/pandas-docs/stable/overview.html#why-more-than-1-data-structure
Pandas nesnelerinin veri modeli bu şekilde seçilmiştir. Sebep kesinlikle bilmediğim bazı avantajlar sağlaması gerçeğinde yatmaktadır (alıntının son cümlesini tam olarak anlamıyorum, belki de nedeni budur)
.
Düzenleme: Bana katılmıyorum
Bir DataFrame olur unsurlardan oluşan edilemez olması Aşağıdaki kod aynı tür "Serisi" için de bir sütun için bir satır verir çünkü, Seri:
import pandas as pd
df = pd.DataFrame(data=[11,12,13], index=[2, 3, 3])
print '-------- df -------------'
print df
print '\n------- df.loc[2] --------'
print df.loc[2]
print 'type(df.loc[1]) : ',type(df.loc[2])
print '\n--------- df[0] ----------'
print df[0]
print 'type(df[0]) : ',type(df[0])
sonuç
-------- df -------------
0
2 11
3 12
3 13
------- df.loc[2] --------
0 11
Name: 2, dtype: int64
type(df.loc[1]) : <class 'pandas.core.series.Series'>
--------- df[0] ----------
2 11
3 12
3 13
Name: 0, dtype: int64
type(df[0]) : <class 'pandas.core.series.Series'>
Dolayısıyla, bir DataFrame'in Serilerden oluştuğunu varsaymanın bir anlamı yoktur, çünkü bu Serilerin ne olması gerekir: sütunlar mı yoksa satırlar mı? Aptalca soru ve vizyon.
.
O halde DataFrame nedir?
Bu cevabın önceki sürümünde, ben cevabını bulmaya çalışırken, bu soru soruldu Why is that?
OP ve benzeri sorgulama sorunun parçası single rows to get converted into a series - why not a data frame with one row?
, onun yorumun birinde
ise Is there a way to ensure I always get back a data frame?
parçası Dan Allan tarafından yanıtlandı.
Daha sonra, yukarıda alıntılanan Pandaların dokümanları, pandaların veri yapılarının en iyi şekilde daha düşük boyutlu verilerin kapsayıcıları olarak görüldüğünü söylediği için, bana, nedeninin anlaşılmasının DataFrame yapılarının doğasının özelliklerinde bulunabileceği gibi geldi.
Ancak, alıntılanan bu tavsiyenin Pandaların veri yapılarının doğasının kesin bir açıklaması olarak alınmaması gerektiğini fark ettim.
Bu tavsiye, DataFrame'in bir Seri kapsayıcı olduğu anlamına gelmez.
Bir DataFrame'in bir Seri kapsayıcı olarak zihinsel temsilinin (bir muhakemenin bir anında dikkate alınan seçeneğe göre satırlar veya sütunlar), gerçekte kesinlikle böyle olmasa bile DataFrame'leri dikkate almanın iyi bir yolu olduğunu ifade eder. "İyi", bu vizyonun DataFrame'lerin verimli bir şekilde kullanılmasını sağladığı anlamına gelir. Bu kadar.
.
O halde DataFrame nesnesi nedir?
DataFrame sınıfı, belirli bir yapı kökenli olan örneklerini üreten NDFrame temel sınıf, kendisinden türetilen PandasContainer da bir üst sınıf temel sınıf Seri sınıfı.
Bunun, 0.12 sürümüne kadar Pandalar için doğru olduğunu unutmayın. Gelecek 0.13 sürümünde, Series ayrıca yalnızca NDFrame sınıfından türetilecektir .
from pandas import Series
print 'Series :\n',Series
print 'Series.__bases__ :\n',Series.__bases__
from pandas import DataFrame
print '\nDataFrame :\n',DataFrame
print 'DataFrame.__bases__ :\n',DataFrame.__bases__
print '\n-------------------'
from pandas.core.generic import NDFrame
print '\nNDFrame.__bases__ :\n',NDFrame.__bases__
from pandas.core.generic import PandasContainer
print '\nPandasContainer.__bases__ :\n',PandasContainer.__bases__
from pandas.core.base import PandasObject
print '\nPandasObject.__bases__ :\n',PandasObject.__bases__
from pandas.core.base import StringMixin
print '\nStringMixin.__bases__ :\n',StringMixin.__bases__
sonuç
Series :
<class 'pandas.core.series.Series'>
Series.__bases__ :
(<class 'pandas.core.generic.PandasContainer'>, <type 'numpy.ndarray'>)
DataFrame :
<class 'pandas.core.frame.DataFrame'>
DataFrame.__bases__ :
(<class 'pandas.core.generic.NDFrame'>,)
-------------------
NDFrame.__bases__ :
(<class 'pandas.core.generic.PandasContainer'>,)
PandasContainer.__bases__ :
(<class 'pandas.core.base.PandasObject'>,)
PandasObject.__bases__ :
(<class 'pandas.core.base.StringMixin'>,)
StringMixin.__bases__ :
(<type 'object'>,)
Şimdi anladığım kadarıyla, bir DataFrame örneğinin, verilerin satırlardan ve sütunlardan çıkarılma şeklini kontrol etmek için hazırlanmış belirli yöntemlere sahip olduğu.
Bu ayıklama yöntemlerinin çalışma yolları bu sayfada açıklanmaktadır:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing
Dan Allan tarafından verilen yöntemi ve diğer yöntemleri buluyoruz.
Neden bu ayıklama yöntemleri olduğu gibi oluşturuldu?
Bunun nedeni, veri analizinde daha iyi olanaklar ve kolaylık sağlayanlar olarak değerlendirilmiş olmalarıdır.
Bu cümlede tam olarak ifade edilen şey:
Pandaların veri yapıları hakkında düşünmenin en iyi yolu, daha düşük boyutlu veriler için esnek kaplar olarak kullanmaktır.
Neden bir DataFRame örneğinden veri çıkarılması does not yapısında yatıyor, bu yatıyor neden bu yapının. Pandaların veri yapısının yapısı ve işleyişinin mümkün olduğunca entelektüel olarak sezgisel olması için yontulmuş olduğunu ve ayrıntıları anlamak için Wes McKinney'nin blogunu okumak gerektiğini tahmin ediyorum.