Pandsデータ構造のSeries(シーケンス)


Pandsで一般的に使用されるデータ構造には、series data frame の2種類がある.panel は破棄されましたので、ここでは紹介しません.実はpanelは3次元データの比較的に使いやすいデータ容器です.この記事ではSeriesのデータタイプを紹介します.
Seriesシーケンス
シーケンスを作成
import pandas as pd
import numpy as np
s = pd.Series(data, index=index)
ここのdataは、Python辞書、numpyのndarayであっても良いし、実数であっても良い.
ndarayからの建立
In [3]: s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])

In [4]: s
Out[4]: 
a    0.4691
b   -0.2829
c   -1.5091
d   -1.1356
e    1.2121
dtype: float64

In [5]: s.index
Out[5]: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

In [6]: pd.Series(np.random.randn(5))
Out[6]: 
0   -0.1732
1    0.1192
2   -1.0442
3   -0.8618
4   -2.1046
dtype: float64
注意:pandsは、一意でないインデックス値をサポートします.
辞書から作成
In [7]: d = {
     'b' : 1, 'a' : 0, 'c' : 2}

In [8]: pd.Series(d)
Out[8]: 
b    1
a    0
c    2
dtype: int64
データがdictでインデックスが渡されていない場合、Pythonバージョン>=3.6、Pandsバージョン>=0.23を使用すると、シリーズインデックスはdictの挿入順に並べられます.Python<3.6またはPands<0.23を使用しています.インデックスが伝達されていない場合、Seriesインデックスは語彙順のdictキーのリストになります.
上記の例では、Pythonバージョンが3.6以下またはPandsバージョンが0.23未満であれば、シリーズは辞書キーの語法順で並べ替えられます.
In [9]: d = {
     'a' : 0., 'b' : 1., 'c' : 2.}

In [10]: pd.Series(d)
Out[10]: 
a    0.0
b    1.0
c    2.0
dtype: float64

In [11]: pd.Series(d, index=['b', 'c', 'd', 'a'])
Out[11]: 
b    1.0
c    2.0
d    NaN
a    0.0
dtype: float64
注意:NaNはパンダスの中ではただのデフォルトのマークです.Noneとは別のものです.nulとは同じことではありません.
実数から構築する
一つの実数が複数のインデックスに対応する場合、各インデックスに対応する値はすべてこの実数です.
In [12]: pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])
Out[12]: 
a    5.0
b    5.0
c    5.0
d    5.0
e    5.0
dtype: float64
操作dictとndarayのようにSeriesを操作できます.
例えば、私達はndarayのカット方法を使うことができます.
In [13]: s[0]
Out[13]: 0.46911229990718628

In [14]: s[:3]
Out[14]: 
a    0.4691
b   -0.2829
c   -1.5091
dtype: float64

In [15]: s[s > s.median()]
Out[15]: 
a    0.4691
e    1.2121
dtype: float64

In [16]: s[[4, 3, 1]]
Out[16]: 
e    1.2121
d   -1.1356
b   -0.2829
dtype: float64

In [17]: np.exp(s)
Out[17]: 
a    1.5986
b    0.7536
c    0.2211
d    0.3212
e    3.3606
dtype: float64
たとえば、私たちはdictの索引方法を使います.
In [18]: s['a']
Out[18]: 0.46911229990718628

In [19]: s['e'] = 12.

In [20]: s
Out[20]: 
a     0.4691
b    -0.2829
c    -1.5091
d    -1.1356
e    12.0000
dtype: float64

In [21]: 'e' in s
Out[21]: True

In [22]: 'f' in s
Out[22]: False
列ラベルが存在しない場合、エラーメッセージkeyErrorが返ってきます.get方法を使うと、デフォルト値はNoneまたは指定されたデフォルト値に戻ります.
>>> s['f']
KeyError: 'f'

n [23]: s.get('f')

In [24]: s.get('f', np.nan)
Out[24]: nan
シーケンスのベクトル操作
このような量子化に向けた動作は、R言語と非常に似ており、シーケンスの各要素を動作させない.
In [25]: s + s
Out[25]: 
a     0.9382
b    -0.5657
c    -3.0181
d    -2.2713
e    24.0000
dtype: float64

In [26]: s * 2
Out[26]: 
a     0.9382
b    -0.5657
c    -3.0181
d    -2.2713
e    24.0000
dtype: float64

In [27]: np.exp(s)
Out[27]: 
a         1.5986
b         0.7536
c         0.2211
d         0.3212
e    162754.7914
dtype: float64
Seriesとndarayの違いは、Seriesの間の操作がラベルに従って自動的にデータを配置することです.したがって、関連するシリーズが同じラベルを持っているかどうかを考慮せずに計算を作成することができます.
In [28]: s[1:] + s[:-1]
Out[28]: 
a       NaN
b   -0.5657
c   -3.0181
d   -2.2713
e       NaN
dtype: float64
注意:通常、インデックスオブジェクト間の動作のデフォルト結果を情報のロスを避けるためにインデックスのセットを作成します.データが足りないにもかかわらず、インデックスラベルは重要な情報です.計算の一部として使用されます.もちろん、dropna関数によってデータが足りないラベルを削除することができます.
シーケンスのname属性
In [29]: s = pd.Series(np.random.randn(5), name='something')

In [30]: s
Out[30]: 
0   -0.4949
1    1.0718
2    0.7216
3   -0.7068
4   -1.0396
Name: something, dtype: float64

In [31]: s.name
Out[31]: 'something'

In [32]: s2 = s.rename("different")

In [33]: s2.name
Out[33]: 'different'
以上の内容を参考にしてくださいhttps://www.pypandas.cn/document/dsintro/series.html