jorisの回答にコメントを書き込んだ:
「単一の行をシリーズに変換するための設計上の決定を理解していません。なぜ1行のデータフレームでないのですか?」
1つの行はシリーズでは変換されません。
これは、ISシリーズ:No, I don't think so, in fact; see the edit
パンダのデータ構造について考える最良の方法は、低次元データ用の柔軟なコンテナーとしてです。たとえば、DataFrameはSeriesのコンテナーで、PanelはDataFrameオブジェクトのコンテナーです。辞書のような方法で、これらのコンテナーにオブジェクトを挿入および削除できるようにしたいと考えています。
http://pandas.pydata.org/pandas-docs/stable/overview.html#why-more-than-1-data-structure
Pandasオブジェクトのデータモデルは、そのように選択されています。その理由は確かに、私が知らないいくつかの利点を保証するという事実にあります(引用の最後の文を完全に理解していない、それが理由かもしれません)。
。
編集:同意しません
次のコードは、行と列で同じタイプ「Series」を提供するため、DataFrameをSeries となる要素で構成することはできません。
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])
結果
-------- 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'>
したがって、これらのSeriesは列または行であると想定されているため、DataFrameがSeriesで構成されているように見せかけるのは意味がありません。愚かな質問とビジョン。
。
次に、DataFrameとは何ですか?
この回答の以前のバージョンでWhy is that?
は、OPの質問の一部に対する回答と同様の質問single rows to get converted into a series - why not a data frame with one row?
が彼のコメントの1つで見つかるようにこの質問
をしましたが、Is there a way to ensure I always get back a data frame?
一部はDan Allanによって回答されています。
次に、上記のパンダのドキュメントでパンダのデータ構造が低次元データのコンテナとして最もよく見られると述べているように、DataFrame構造の性質の特徴にその理由が理解されているように思えました。
しかしながら、私はこの引用されたアドバイスがパンダのデータ構造の性質の正確な説明として取られるべきではないことに気づきました。
このアドバイスは、DataFrameがシリーズのコンテナーであることを意味するものではありません。
それは、実際には厳密には当てはまらない場合でも、シリーズのコンテナーとしてのDataFrameのメンタル表現(推論のある瞬間に考慮されるオプションに応じて行または列のいずれか)がDataFrameを検討する良い方法であることを示しています。「良い」とは、このビジョンによってDataFrameを効率的に使用できるようになることを意味します。それで全部です。
。
次に、DataFrameオブジェクトとは何ですか?
データフレームのクラスは、特定の構造は、に由来しているインスタンス生成NDFrameの基本クラスを、自身が由来する PandasContainerのもの親クラスであるベースクラスシリーズクラス。
これは、バージョン0.12までのPandasでは正しいことに注意してください。次のバージョン0.13では、SeriesはNDFrameクラスのみからも派生します。
# with pandas 0.12
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__
結果
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'>,)
そのため、DataFrameインスタンスには、行と列からデータを抽出する方法を制御するために作成された特定のメソッドがあることがわかりました。
これらの抽出方法は、仕事の方法は、このページで説明されています
http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing
我々はそれにダン・アランおよび他の方法によって与えられた方法を見つけます。
なぜこれらの抽出方法は、昔ながらに作られたのですか?
それは確かに、データ分析の可能性を高め、使いやすさを提供するものとして評価されてきたからです。
それはまさにこの文で表現されているものです:
パンダのデータ構造について考える最良の方法は、低次元データ用の柔軟なコンテナーとしてです。
なぜその構造にない嘘を行いDATAFRAMEインスタンスからのデータの抽出、それはである理由は、この構造の。Pandasのデータ構造の構造と機能は、可能な限り知的に直感的に理解できるように彫られており、詳細を理解するには、Wes McKinneyのブログを読む必要があると思います。