目次
1. 文字列およびテキストデータ
シリーズは、配列内の各要素を簡単に操作できる文字列処理メソッドをサポートしています。これらのメソッドは、欠損値や null 値を自動的に除外します。これがおそらく最も重要な機能です。これらのメソッドは str
Series の属性を介してアクセスされます。通常、これらの操作の名前は、. lower();.upper();.len() などの組み込みの文字列メソッドやその他の基本メソッドと一致します。
例:
import pandas as pd
import numpy as np
s = pd.Series([' Tom ',' xiaoming ',' john '])
s
#删除空格
s.str.strip()
#字符串分割
s.str.split('o')
#字符串拼接
s.str.cat(sep="<=>")
#辨别分类
s.str.get_dummies()
#字符串包含的内容
s.str.contains('m')
#字符串替换
s.str.replace('o',"dd")
#计数
s.str.count('i')
#对一系列字符串判断是否是数字
s = pd.Series([' Tom ','778899',' xiaoming ',' john '])
s.str.isnumeric()
出力結果:
# 原始Series
0 Tom
1 xiaoming
2 john
dtype: object
# 删除空格
0 Tom
1 xiaoming
2 john
dtype: object
# 字符串以o进行分割
0 [ T, m ]
1 [ xia, ming ]
2 [ j, hn ]
dtype: object
# 字符串拼接
' Tom <=> xiaoming <=> john '
# 辨别分类
Tom john xiaoming
0 1 0 0
1 0 0 1
2 0 1 0
# 字符串包含的内容
0 True
1 True
2 False
dtype: bool
# 字符串替换
0 Tddm
1 xiaddming
2 jddhn
dtype: object
# 计数(字符串中i的数量)
0 0
1 2
2 0
dtype: int64
# 对一系列字符串判断是否是数字
0 False
1 True
2 False
3 False
dtype: bool
2. データのインデックス作成と選択
pandas では、インデックス添字または列名インデックスの使用に加えて、データのインデックス付けに .loc();.iloc() を使用することもできます。
2.1 .loc() はラベルによって選択します
pandas は、純粋なラベルベースのインデックス作成を実現する一連のメソッドを提供します。これは厳格な包括ベースの契約です。リクエストされたすべてのタグはインデックスに存在する必要があり、そうでない場合はKeyError
インデックスが生成されます。スライスするときは、インデックスに開始境界と終了境界が存在する場合はそれを含めます。整数は有効なラベルですが、位置ではなくラベルを参照します。
この.loc
プロパティは主なアクセス方法です。有効なエントリは次のとおりです。
-
5
または などの単一のラベル'a'
(インデックスのラベル5
として解釈されることに注意してください。この使用法はインデックスに沿った整数の位置ではありません)。 -
ラベルのリストまたは配列。
['a', 'b', 'c']
-
ラベル付きスライス オブジェクト
'a':'f'
(通常の Python スライスとは異なり、開始と終了がインデックスに含まれることに注意してください。 「ラベル付きスライス」を参照してください)。 -
ブール配列。
-
A
callable
、「呼び出し可能による選択」を参照してください。
例: 操作用に 8 行の破れたデータをランダムに生成する
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8,4),index=['a','b','c','d','e','f','g','h'],columns=["A","B","C","D"])
df
# 输出结果
A B C D
a 0.529671 -0.076485 0.379469 1.494926
b -0.082312 -0.328869 0.175183 -0.798430
c 0.681922 0.741320 -0.910726 -2.176608
d 1.500632 -1.165229 0.316722 0.402977
e -2.044217 0.930242 0.433050 0.542472
f 1.332038 0.476599 1.661994 2.102483
g 0.488362 -1.667154 -0.651079 -0.049332
h -0.676308 0.904894 1.592176 0.409881
1. 列 AB の内容をすべて選択します (スライスを使用)
#选择A.B列所有的内容,基于标签
df.loc[:,['A','B']]
#输出结果
A B
a 0.529671 -0.076485
b -0.082312 -0.328869
c 0.681922 0.741320
d 1.500632 -1.165229
e -2.044217 0.930242
f 1.332038 0.476599
g 0.488362 -1.667154
h -0.676308 0.904894
2. ae行、b以降の列(スライス)を選択します。
#选择a-e行,b以后的列
df.loc['a':'e','B':]
# 输出结果:
B C D
a -0.076485 0.379469 1.494926
b -0.328869 0.175183 -0.798430
c 0.741320 -0.910726 -2.176608
d -1.165229 0.316722 0.402977
e 0.930242 0.433050 0.542472
3. aタグ内の1より大きいデータを取り出す
# 取出a标签里大于一的数据
df.loc['a']>1
# 输出结果
A False
B False
C False
D True
Name: a, dtype: bool
4. a が 1 より大きい列の内容を取り出します。
# 取出a大于1的那一列内容
df.loc[:,df.loc['a']>1]
#输出结果:
D
a 1.494926
b -0.798430
c -2.176608
d 0.402977
e 0.542472
f 2.102483
g -0.049332
h 0.409881
2.2 .iloc() は位置によって選択します
pandas は、純粋に整数ベースのインデックスを取得するための一連のメソッドを提供します。セマンティクスは Python と NumPy スライスに厳密に従っています。これらはインデックスです0-based
。スライスする場合、開始境界は含まれますが、上限は除外されます。有効なラベルであっても整数以外を使用しようとすると、が発生しますIndexError
。
この.iloc
プロパティは主なアクセス方法です。有効なエントリは次のとおりです。
-
整数、例:
5
。 -
整数のリストまたは配列。
[4, 3, 0]
-
ints を持つスライス オブジェクト
1:7
。 -
ブール配列。
-
A
callable
、「呼び出し可能による選択」を参照してください。
例: 上記の場合のデータフレーム
A B C D
a 0.529671 -0.076485 0.379469 1.494926
b -0.082312 -0.328869 0.175183 -0.798430
c 0.681922 0.741320 -0.910726 -2.176608
d 1.500632 -1.165229 0.316722 0.402977
e -2.044217 0.930242 0.433050 0.542472
f 1.332038 0.476599 1.661994 2.102483
g 0.488362 -1.667154 -0.651079 -0.049332
h -0.676308 0.904894 1.592176 0.409881
1. (行) 位置に基づくインデックス
# 基于(行)位置的索引
df.iloc[0]
#输出结果:
A 0.529671
B -0.076485
C 0.379469
D 1.494926
Name: a, dtype: float64
df.iloc[1]
#输出结果:
A -0.082312
B -0.328869
C 0.175183
D -0.798430
Name: b, dtype: float64
2. 3行目2列目以降の内容を取り出す
df.iloc[3:,1:]
#输出结果:
B C D
d -1.165229 0.316722 0.402977
e 0.930242 0.433050 0.542472
f 0.476599 1.661994 2.102483
g -1.667154 -0.651079 -0.049332
h 0.904894 1.592176 0.409881
2.3 属性を使用してデータを取得する
上記のデータはpandasでは属性取得でもデータを取得することができます。
例:A列とD列のデータを取り出す
#属性获取,取出A列内容
df.A
#输出结果:
a 1.310455
b -1.015628
c 1.281924
d 0.496812
e -1.733183
f 0.140338
g -0.179063
h -0.642013
Name: A, dtype: float64
df.D
#输出结果:
a -0.298131
b -1.141310
c -0.302760
d 1.188531
e -1.608952
f 0.437460
g -0.696010
h -0.525048
Name: D, dtype: float64
3. 統計関数
Pandas は、パーセント変更.pct_change()、共分散.cov()、相関.corr()、データランキング.ランク()メソッドなど、ユーザーが使用できるさまざまな統計関数を提供します。
3.1 パーセント変化.pct_change()
Series
そして、指定された期間数の変化率を計算するDataFrame
メソッド.pct_change()があります (変化率を計算する前に、fill_method
NA/null 値でパディングを使用します)。
基本的な構文:
Series.pct_change()
or
DataFrame.pct_change(periods=行数)
例:
import pandas as pd
import numpy as np
#创建基础Series
s = pd.Series([877,865,874,890,912])
s
# 输出结果:
0 877
1 865
2 874
3 890
4 912
dtype: int64
#创建基础dataframe
df = pd.DataFrame(np.random.randn(5, 4))
df
#输出结果
0 1 2 3
0 0.655875 -2.195588 -0.785019 1.122582
1 0.852057 -2.276063 1.528201 -0.167119
2 -1.057979 -0.396548 -0.915528 0.026226
3 -0.490155 1.803235 0.005851 -1.252117
4 0.946558 -2.680471 -0.055739 -0.624553
変化の割合を取得します。
# 变化的百分比程度(波动变化)
s.pct_change()
#输出结果:
0 NaN
1 -0.013683
2 0.010405
3 0.018307
4 0.024719
dtype: float64
# 变化的百分比程度
df.pct_change(periods=1)
# 输出结果:
0 1 2 3
0 NaN NaN NaN NaN
1 0.299115 0.036653 -2.946706 -1.148870
2 -2.241677 -0.825775 -1.599088 -1.156933
3 -0.536707 -5.547331 -1.006391 -48.742482
4 -2.931143 -2.486479 -10.526903 -0.501202
3.2 共分散.cov()
Series.cov() を使用すると、系列間の共分散 (欠損値を除く) を計算できます。
DataFrame.cov() は、 DataFrame 内の系列間のペアごとの共分散を計算します (NA/null 値も除外します)。
例:
#计算两个Series之间的协方差
s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(10))
#两个数据的协方差
s1.cov(s2)
#输出结果:
-0.0751790891671201
# 计算dataframe中数据的协方差
frame = pd.DataFrame(np.random.randn(1000, 5), columns=["a", "b", "c", "d", "e"])
frame.cov()
#输出结果:
a b c d e
a 1.000882 -0.003177 -0.002698 -0.006889 0.031912
b -0.003177 1.024721 0.000191 0.009212 0.000857
c -0.002698 0.000191 0.950735 -0.031743 -0.005087
d -0.006889 0.009212 -0.031743 1.002983 -0.047952
e 0.031912 0.000857 -0.005087 -0.047952 1.042487
DataFrame.cov
min_periods
有効な結果を得るために各列ペアに必要な観測値の最小数を指定するオプションのキーワードもサポートされています。例えば
フレーム.cov(min_periods=12)
データフレーム内のデータが少なくとも 12 列あることを確認し、12 列が足りない場合は NaN を返します。
3.3 相関.corr()
相関関係は .coor() メソッドを使用して計算できます。このmethod
パラメーターを使用して、相関関係を計算するいくつかの方法が提供されます。
メソッド名 |
説明する |
---|---|
|
標準相関係数 |
|
ケンダル・タウの相関係数 |
|
スピアマン順位相関係数 |
例:
1. 2 つのシリーズ間の相関関係
s1 = pd.Series(np.random.randn(10))
s2 = s1*2
#相关性(s1与s2)
s1.corr(s2)
#输出结果:
0.9999999999999999
2. 3つのデータセット(データフレーム)間の相関関係
s1 = pd.Series(np.random.randn(10))
s2 = s1*2
s3 = pd.Series(np.random.randn(10))
df = pd.DataFrame({
's1':s1,
's2':s2,
's3':s3
})
df
# 输出dataframe
s1 s2 s3
0 -1.149359 -2.298718 0.742016
1 0.476084 0.952168 -0.375759
2 -0.998627 -1.997255 0.721653
3 1.047331 2.094663 -0.078039
4 0.444710 0.889420 -0.525895
5 -0.411778 -0.823557 -0.402789
6 -0.935911 -1.871822 -0.597614
7 -0.652570 -1.305140 0.636498
8 1.055361 2.110722 -0.763907
9 -1.222631 -2.445262 -0.153914
# 三者相关性
df.corr()
#输出结果:
s1 s2 s3
s1 1.000000 1.000000 -0.548589
s2 1.000000 1.000000 -0.548589
s3 -0.548589 -0.548589 1.000000
3.4 データランキング.rank()
.rank() メソッドは、関係にグループのランク平均が割り当てられるデータ ランクを生成します。次に例を示します。
s = pd.Series([877,865,874,890,912])
s
#输出结果:
0 877
1 865
2 874
3 890
4 912
dtype: int64
s.rank()
#输出结果:
0 3.0
1 1.0
2 2.0
3 4.0
4 5.0
dtype: float64
データフレームでは、rank() は行 ( axis=0
) または列 ( axis=1
) をランク付けできます。NaN
値はランキングから除外されます。
rank
ascending
オプションで、デフォルトが true になる引数を受け取ります。false の場合、データは逆にランク付けされ、より大きな値にはより小さなランクが割り当てられます。
rank
さまざまな描画メソッドがサポートされており、method
パラメータで指定されます。
average
:同率グループの平均順位
min
:グループ内で最下位のランク
max
:グループ内最高位
first
: 配列内に出現する順序で割り当てられるランク
4. ウィンドウ関数
pandas には、ウィンドウ操作 (値のスライディング パーティションに対して集計を実行する操作) を実行するための API のコンパクトなセットが含まれています。APIは、ウィンドウ処理メソッドを呼び出してから集計関数を呼び出すために必要なパラメーターを備えたAPI groupby
、Series、およびDataFrameと同様に機能します。
pandas は 4 種類のウィンドウ操作をサポートしています。
-
タンブリング ウィンドウ: 値に対する一般的な固定または可変のスライディング ウィンドウ。
-
重み付きウィンドウ: ライブラリによって提供される重み付き非長方形ウィンドウ
scipy.signal
。 -
拡張ウィンドウ: 値が累積されるウィンドウ。
-
指数関数的に重み付けされたウィンドウ: 値の累積的かつ指数関数的に重み付けされたウィンドウ。
コンセプト |
方法 |
返されたオブジェクト |
時間ベースのウィンドウのサポート |
チェーンされた groupby をサポート |
サポートテーブル方式 |
オンライン運用をサポート |
---|---|---|---|---|---|---|
ローラーシャッター |
|
|
はい |
はい |
はい>1.3 |
いいえ |
重み付けウィンドウ |
|
|
いいえ |
いいえ |
いいえ |
いいえ |
ウィンドウを拡大する |
|
|
いいえ |
はい |
はい>1.3 |
いいえ |
指数関数的に重み付けされたウィンドウ |
|
|
いいえ |
>1.2です |
いいえ |
はい (バージョン 1.3 以降) |
例:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10,4))
df
#输出结果:
0 1 2 3
0 2.599818 0.451315 -0.428038 0.035233
1 0.395523 -0.098377 0.059649 -0.489922
2 0.550164 -0.469461 1.193710 0.567562
3 1.483434 -0.793989 -0.738174 0.515078
4 0.395409 0.425578 -0.439963 -0.207277
5 -0.035479 -1.438315 -0.863333 -0.129948
6 -0.336889 -0.094188 -1.452638 0.083352
7 -0.626117 0.120990 -0.566740 0.665003
8 -1.437816 -0.112235 -0.232150 -0.099910
9 -0.582537 0.388641 1.008226 0.321893
1. .rolling() ローリングシャッター
# 滚动窗口求每三行之间的平均值
df.rolling(window=3).mean()
#输出结果:
0 1 2 3
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 1.181835 -0.038841 0.275107 0.037625
3 0.809707 -0.453942 0.171729 0.197573
4 0.809669 -0.279291 0.005191 0.291788
5 0.614455 -0.602242 -0.680490 0.059284
6 0.007681 -0.368975 -0.918644 -0.084624
7 -0.332828 -0.470504 -0.960904 0.206135
8 -0.800274 -0.028478 -0.750509 0.216148
9 -0.882157 0.132465 0.069779 0.295662
2. .expanding でウィンドウを展開します。
#expanding
df.expanding(min_periods=3).mean()
#输出结果:
0 1 2 3
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 1.181835 -0.038841 0.275107 0.037625
3 1.257235 -0.227628 0.021787 0.156988
4 1.084869 -0.096987 -0.070563 0.084135
5 0.898145 -0.320542 -0.202691 0.048455
6 0.721711 -0.288205 -0.381255 0.053440
7 0.553233 -0.237056 -0.404441 0.129885
8 0.332005 -0.223187 -0.385297 0.104352
9 0.240551 -0.162004 -0.245945 0.126106