パンダシリーズと単一列のDataFrameの違いは何ですか?


168

パンダはなぜSeriesと単一列を区別するのDataFrameですか?
言い換えれば、Seriesクラスが存在する理由は何ですか?

私は主に日時インデックス付きの時系列を使用していますが、これはコンテキストの設定に役立ちます。


まあ、それらは明らかに異なります。単一列のデータフレームしかないため、または操作の結果が単一列のデータフレームになるために、まだデータフレームを返す特定の操作を参照していると思います。ただし、単一の列を選択する場合、あいまいさはなく、これはシリーズに分解されます。あなたはあなたの問題が何であるかを説明するためにサンプルコードを示さなければなりません。
EdChum 2014


6
主な問題は、さまざまなメソッドを持つSeriesオブジェクトの必要性が見当たらないことです。
サロエレ2014

まず、名前空間に違いがあります。シリーズには最上位レベルの名前のみがあり、データフレームには最上位レベルと列名があります。これにより、新しいシリーズと新しい列を処理/作成するための構文に大きな違いが生じる可能性があります。
JohnE 2014

4
私の知る限り、この質問にはまだ答えるべきです。1が考えることができるにもかかわらずDataFrameとしてdictSeries(つまり、現在の実装ではありませんが)あなたが今までに戻ってくる理由、それはまだ不明だSeriesオブジェクトを代わりにDataFrame(つまり、概念的dictつのエントリを持ちます)。
Alex

回答:


190

パンダのドキュメントを引用する

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

ラベル付きの軸(行と列)を持つ、2次元のサイズが可変で、潜在的に異種の表形式のデータ構造 算術演算は、行と列の両方のラベルで整列します。Seriesオブジェクトのdictのようなコンテナと考えることができます。主要なパンダのデータ構造。

したがって、Seriesは、DataFrame概念的にだけでなく文字通り、の1つの列のデータ構造です。つまり、aのデータDataFrameは実際にはのコレクションとしてメモリに格納されますSeries

同様に、マトリックスはリストで作成されるため、リストとマトリックスの両方が必要です。単一行マトリックスは、機能的にはリストと同等ですが、それらを構成するリストなしでは存在できません。

どちらも非常に類似したAPIを持っていますが、DataFrameメソッドには常に複数の列がある可能性に対応していることがわかります。そしてもちろん、いつでも別のSeries(または同等のオブジェクト)をに追加できますが、別のにDataFrame追加するSeriesSeriesはを作成する必要がありDataFrameます。


2
ご回答有難うございます。私の質問は、データフレームの選択が突然シリーズを返し、列属性にアクセスできなかったときのコードのバグに触発されました。私は混乱だけではないよ:stackoverflow.com/questions/16782323/...
saroele

そうですか。おそらく、彼らが異なる__repr__行動をとった場合に役立つので、それらを混同することはできませんか?
PythonNut 2014年

6
DataFramefromの実際の内部データ構造については何も結論付けられませんCan be thought of as a dict-like container for Series objects。実際、現在はとして格納されていますBlockManager(これは信頼すべきではない実装の詳細です)。
timdiels

1
まだ混乱していますが、シリーズではなく単一列のデータフレームをいつ使用しますか?
dhiraj suvarna

4
私は知識を持っているかもしれませんが、WHYシリーズが存在するというOPの質問に対する回答が表示されません。シリーズとデータフレームの関係を説明する回答はありますが、データフレームの特別なケース(つまり、列が1つしかないもの)ではなく、シリーズを個別のデータ型として持つ必要がある理由を説明する回答はありません。
MightyCurious

14

パンダのドキュメントからhttp://pandas.pydata.org/pandas-docs/stable/dsintro.html Seriesは、任意のデータ型を保持できる1次元のラベル付き配列です。パンダシリーズの形式でデータを読み取るには:

import pandas as pd
ds = pd.Series(data, index=index)

DataFrameは、潜在的に異なるタイプの列を持つ2次元のラベル付きデータ構造です。

import pandas as pd
df = pd.DataFrame(data, index=index)

上記の両方のインデックスにリストがあります

例:次のデータを含むcsvファイルがあります。

,country,popuplation,area,capital
BR,Brazil,10210,12015,Brasile
RU,Russia,1025,457,Moscow
IN,India,10458,457787,New Delhi

上記のデータをシリーズおよびデータフレームとして読み取るには:

import pandas as pd
file_data = pd.read_csv("file_path", index_col=0)
d = pd.Series(file_data.country, index=['BR','RU','IN'] or index =  file_data.index)

出力:

>>> d
BR           Brazil
RU           Russia
IN            India

df = pd.DataFrame(file_data.area, index=['BR','RU','IN'] or index = file_data.index )

出力:

>>> df
      area
BR   12015
RU     457
IN  457787

2
もし誰かが反対票を投じようと努力しているなら、あなたも理由を述べることを試みてもらえますか?
Umesh Kaushik

2
私は反対票を投じませんでしたが、あなたのコードは機能しません。あなたは、変更することもできますfile_databrics、CSVに米国行を追加し、変更['BR'....'US']しますbrics.index。おそらく正しいpupuplation
RolfBly

@RolfBly:間違いを指摘していただきありがとうございます。それらを作るのは私の馬鹿げた部分でした。それらを変更しました。ありがとうございました!そして、それを読むことに関して、私はただの例をとったので、ランダムな値を取った。
Umesh Kaushik

4

シリーズは、整数、浮動小数点数、文字列などの任意のデータ型を保持できる1次元オブジェクトです。

   import pandas as pd
   x = pd.Series([A,B,C]) 

0 A
1 B
2 C

シリーズの最初の列はインデックス、つまり0、1、2と呼ばれます。2番目の列は実際のデータ、つまりA、B、Cです。

DataFramesは、シリーズ、リスト、辞書を保持できる2次元オブジェクトです。

df=pd.DataFrame(rd(5,4),['A','B','C','D','E'],['W','X','Y','Z'])

2

系列は、任意のデータ型(整数、文字列、浮動小数点数、Pythonオブジェクトなど)を保持できる1次元のラベル付き配列です。軸ラベルはまとめてインデックスと呼ばれます。Seriesを作成する基本的な方法は、以下を呼び出すことです。

s = pd.Series(data, index=index)

DataFrameは、潜在的に異なるタイプの列を持つ2次元のラベル付きデータ構造です。これは、スプレッドシートやSQLテーブル、またはSeriesオブジェクトの辞書のようなものと考えることができます。

 d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
 two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
 df = pd.DataFrame(d)

0

車のデータをインポートする

import pandas as pd

cars = pd.read_csv('cars.csv', index_col = 0)

次に、cars.csvファイルの外観を示します。

drives_right列をシリーズとして出力します。

print(cars.loc[:,"drives_right"])

    US      True
    AUS    False
    JAP    False
    IN     False
    RU      True
    MOR     True
    EG      True
    Name: drives_right, dtype: bool

シングルブラケットバージョンはPandasシリーズを提供し、ダブルブラケットバージョンはPandas DataFrameを提供します。

drives_right列をDataFrameとして出力します。

print(cars.loc[:,["drives_right"]])

         drives_right
    US           True
    AUS         False
    JAP         False
    IN          False
    RU           True
    MOR          True
    EG           True

シリーズを別のシリーズに追加すると、DataFrameが作成されます。


1
編集ありがとうございます。今はずっと良く見えます。@Zoe
abhishek_7081
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.