Pandsデータ構造のSeries(シーケンス)
Pandsで一般的に使用されるデータ構造には、
Seriesシーケンス
シーケンスを作成
ndarayからの建立
辞書から作成
上記の例では、Pythonバージョンが3.6以下またはPandsバージョンが0.23未満であれば、シリーズは辞書キーの語法順で並べ替えられます.
実数から構築する
一つの実数が複数のインデックスに対応する場合、各インデックスに対応する値はすべてこの実数です.
例えば、私達はndarayのカット方法を使うことができます.
このような量子化に向けた動作は、R言語と非常に似ており、シーケンスの各要素を動作させない.
シーケンスのname属性
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