Pandasの概要とSeriesの基礎応用
68939 ワード
Pandas(Panel data&Python data analysis)は、Numpyに基づいて構築された強力なPythonデータ分析パッケージです.Pandasは、データの統計分析を迅速に行うことができ、欠落したデータをよりよく処理することができ、csv、excel、txtなどに関するデータ処理を柔軟に行うことができるほか、時間系列の特定機能もあり、Excelよりデータを処理するのに便利で、できることが多い.
pandas学習ルート:【pandas公式ドキュメントリンク】は、学ぶ前に【Numpy】を学ぶことをお勧めします.
pandasライブラリのインストール方法
pip install pandas
二、Pandasのデータ構造
Pandasでよく使われるデータ構造には、SeriesとDataFrameの2種類があります.これらのデータ構造はNumpyの2次元配列に基づいて構築されているため,実行効率が高い.私自身の理解はSeriesが単列配列であり、つまり1列のデータしかないということです.DataFrameは2次元配列で、Excelテーブルのように、複数行の複数列で構成されています.Excelとは異なり、1つの行列インデックスが複数あることです.インデックスがあれば、データ処理と分析で使いやすく、柔軟になります.
2.1 Seriesの概要
Seriesは名前とインデックスを持つ1次元配列オブジェクトであり、Seriesに含まれるデータ型は整数、浮動小数点、文字列、list、ndarrayなどであってもよい.
pandasを使用したSeriesインスタンスの作成
# pandas
import pandas as pd
data = [1,2]
pd.Series(data = data,index=None, dtype=None, name=None, copy=False, fastpath=False)
0 1
1 2
dtype: int64
パラメータ解析:
番号付け
パラメータ
説明
デフォルト
1
data(必須)
リストなどのSeriesに格納されているデータ
data=None
2
index(オプション)
類似配列またはインデックスはdataと同じ長さです.ユニークでないインデックス値を許可します.指定されていない場合は、RangeIndex(0,1,2,.,n)がデフォルトです.dictとindexシーケンスを同時に使用すると、インデックスはdictで見つかったキーを上書きします.
index=None
3
dtype(オプション)
データ型に使用され、ない場合はデータ型が推定されます.
dtype=None
4
name(オプション)
Seriesの名前
name=None
5
copy(オプション)
入力データのコピー
copy=False
6
fastpath(オプション)
クイックパス
fastpath=False
2.2 Seriesの作成
リストまたはNumpy配列の作成
""" """
import numpy as np
import pandas as pd
lst = ["a","b","c"]
ndarry = np.arange(3)
print(lis,'\t\t',ndarry)
ds1 = pd.Series(lst)
ds2 = pd.Series(ndarry)
print(ds1,'
',ds2)
[0, 1, 2] [0 1 2]
0 a
1 b
2 c
dtype: object
0 0
1 1
2 2
dtype: int32
メタグループの作成
# pandas ,,np.nan
tup = (1,np.nan,1)
s = pd.Series(tup)
print(s)
0 1.0
1 NaN
2 1.0
dtype: float64
辞書の作成
dic = {"a":[1,2],"b":2,"c":3}
pd.Series(dic) # key
a [1, 2]
b 2
c 3
dtype: object
コレクションの作成
# , ,
s = set(range(3))
pd.Series(s)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
1 # , ,
2 s = set(range(3))
----> 3 pd.Series(s)
~\Anaconda3\lib\site-packages\pandas\core\series.py in __init__(self, data, index, dtype, name, copy, fastpath)
272 pass
273 elif isinstance(data, (set, frozenset)):
--> 274 raise TypeError(f"'{type(data).__name__}' type is unordered")
275 elif isinstance(data, ABCSparseArray):
276 # handle sparse passed here (and force conversion)
TypeError: 'set' type is unordered
スカラーの作成
# ,
cc = pd.Series(5,index=["a","b"],name="aa")
cc
a 5
b 5
Name: aa, dtype: int64
2.3 Seriesインデックス
索引の設定
""" 1"""
tup = (1,np.nan,1)
s = pd.Series(tup,index=["a","b","c"],name="cc")
s
a 1.0
b NaN
c 1.0
Name: cc, dtype: float64
""" 2"""
#
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
s #
abc
a 1
b nan
c 1
Name: cc, dtype: object
""" 3"""
tup = (1,np.nan,1)
s = pd.Series(tup)
s.index=["a",'2','3']
s
a 1.0
2 NaN
3 1.0
dtype: float64
インデックスの名前の変更
""" 2"""
#
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
s.index.name = 'new' # index
s
new
a 1
b nan
c 1
Name: cc, dtype: object
索引の表示
""" 2"""
#
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(s.index)
print(" :",s.index.tolist())
Index(['a', 'b', 'c'], dtype='object', name='abc')
: ['a', 'b', 'c']
索引名の変更
""" 2"""
#
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(" :",s.index.tolist())
s.rename(index={'a':'aa'},inplace=True)
print(" :",s.index.tolist())
: ['a', 'b', 'c']
: ['aa', 'b', 'c']
""" 2"""
#
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(" :",s.index.tolist())
print(" :",s.index.tolist())
: ['a', 'b', 'c']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
5 s = pd.Series(tup,index=index_name,name="cc",dtype="str")
6 print(" :",s.index.tolist())
----> 7 s.index(["1",'2','3'])
8 print(" :",s.index.tolist())
TypeError: 'Index' object is not callable
データの表示
""" 2"""
#
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(s.values)
print(" :",s.values.tolist())
['1' 'nan' '1']
: ['1', 'nan', '1']
Series名の表示
""" 2"""
#
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(s.name)
cc
2.4 Seriesの追加削除
2.4.1増加
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s1 = pd.Series(tup,index=index_name,name="cc",dtype="str")
s1
abc
a 1
b nan
c 1
Name: cc, dtype: object
s1["d"] = 2 #
s1
abc
a 1
b nan
c 1
d 2
Name: cc, dtype: object
dic = {"a":[1,2],"b":2,"c":3}
s2 = pd.Series(dic) # key
s2
a [1, 2]
b 2
c 3
dtype: object
s1.append(s2) # Series
a 1
b nan
c 1
d 2
a [1, 2]
b 2
c 3
dtype: object
2.4.2削除
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
display(s)
abc
a 1
b nan
c 1
Name: cc, dtype: object
# 1 del
del s["b"]
print(s)
abc
a 1
c 1
Name: cc, dtype: object
print(" :",s)
# 2 drop
a = s.drop("a")
print(" :",s)
: abc
a 1
c 1
Name: cc, dtype: object
: abc
a 1
c 1
Name: cc, dtype: object
# s , a
print(a)
abc
c 1
Name: cc, dtype: object
# a , inplace,
print(" :",s)
aa = s.drop("a",inplace=True)
print(" :",s)
: abc
a 1
c 1
Name: cc, dtype: object
: abc
c 1
Name: cc, dtype: object
""" Drop """
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(" :",s)
aa = s.drop(["a","b"],inplace=True)
print(" :",s)
: abc
a 1
b nan
c 1
Name: cc, dtype: object
: abc
c 1
Name: cc, dtype: object
2.4.3変更
# ,
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(" :",s)
s["a"] = 2
print(" :",s)
: abc
a 1
b nan
c 1
Name: cc, dtype: object
: abc
a 2
b nan
c 1
Name: cc, dtype: object
# ,
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(" :",s)
#
s.loc["a"] = 3
print(" :",s)
: abc
a 1
b nan
c 1
Name: cc, dtype: object
: abc
a 3
b nan
c 1
Name: cc, dtype: object
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
print(" :",s)
# - , 。
s.iloc[2] = 3
print(" :",s)
: abc
a 1
b nan
c 1
Name: cc, dtype: object
: abc
a 1
b nan
c 3
Name: cc, dtype: object
2.4.4検査
索引による請求値の検索
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
s["a"]
'1'
インデックス値による複数値の検索
import pandas as pd
index_name = pd.Index(["a","b","c"],name="abc")
tup = (1,np.nan,1)
s = pd.Series(tup,index=index_name,name="cc",dtype="str")
s[["a","b"]]
abc
a 1
b nan
Name: cc, dtype: object
ブール型インデックスによるフィルタ
import pandas as pd
index_name = pd.Index(["a","b","c","d"],name="num")
tup = (1,2,3,4)
s = pd.Series(tup,index=index_name,name="cc",dtype="float")
s[s>2]
num
c 3.0
d 4.0
Name: cc, dtype: float64
位置スライスとラベルスライスによるデータの照会
import pandas as pd
index_name = pd.Index(["a","b","c","d"],name="num")
tup = (1,2,3,4)
s = pd.Series(tup,index=index_name,name="cc",dtype="float")
s[:2] #
num
a 1.0
b 2.0
Name: cc, dtype: float64
s["a":"c"]
num
a 1.0
b 2.0
c 3.0
Name: cc, dtype: float64
s[[0,1]]
num
a 1.0
b 2.0
Name: cc, dtype: float64
純整数-位置に基づいたインデックスで、位置によって選択できます.
s.iloc[:2][:]
num
a 1.0
b 2.0
Name: cc, dtype: float64
ラベルまたはブール配列による行と列のセットへのアクセス
s.loc["c":]
num
c 3.0
d 4.0
Name: cc, dtype: float64
s.loc[["c","b"]]
num
c 3.0
b 2.0
Name: cc, dtype: float64
前後n行の表示
import pandas as pd
tup = (1,2,3,4,4,5,6,7,8,9)
s = pd.Series(tup)
print(" 5 :",s.head()) # 5
print(" 5 :",s.tail()) # 5
print(" 2 :",s.head(2)) # 2
print(" 2 :",s.tail(2)) # 2
5 : 0 1
1 2
2 3
3 4
4 4
dtype: int64
5 : 5 5
6 6
7 7
8 8
9 9
dtype: int64
2 : 0 1
1 2
dtype: int64
2 : 8 8
9 9
dtype: int64
2.5 Series統計計算
単一Seriesの計算
import pandas as pd
tup = (1,2,3,4,5,5,6,7,8,9)
s1 = pd.Series(tup[:5])
s1 * 2 # 2 ,
0 2
1 4
2 6
3 8
4 10
dtype: int64
s1 +1 # 1
0 2
1 3
2 4
3 5
4 6
dtype: int64
2つのSeries間の演算(インデックスが同じ)
# +
import pandas as pd
tup = (1,2,3,4,5,5,6,7,8,9)
s1 = pd.Series(tup[:5])
s2 = pd.Series(tup[5:])
print("s1:",s1)
print("s2:",s2)
s1: 0 1
1 2
2 3
3 4
4 5
dtype: int64
s2: 0 5
1 6
2 7
3 8
4 9
dtype: int64
s1 + s2 #
0 6
1 8
2 10
3 12
4 14
dtype: int64
s2 - s1 #
0 4
1 4
2 4
3 4
4 4
dtype: int64
2つのSeries間の演算(インデックスが異なる)
# +
import pandas as pd
tup = (1,2,3,4,5,5,6,7,8,9)
s1 = pd.Series(tup[:5],index=["a","b",1,2,3])
s2 = pd.Series(tup[5:])
print("s1:",s1)
print("s2:",s2)
s1: a 1
b 2
1 3
2 4
3 5
dtype: int64
s2: 0 5
1 6
2 7
3 8
4 9
dtype: int64
s1 + s2 # NaN
0 NaN
1 9.0
2 11.0
3 13.0
4 NaN
a NaN
b NaN
dtype: float64
s1 - s2 # NaN
0 NaN
1 -3.0
2 -3.0
3 -3.0
4 NaN
a NaN
b NaN
dtype: float64
統計計算
import pandas as pd
tup = (1,2,3,4,5,5,6,7,8,9)
s = pd.Series(tup)
s.describe() #
count 10.000000
mean 5.000000
std 2.581989
min 1.000000
25% 3.250000
50% 5.000000
75% 6.750000
max 9.000000
dtype: float64
#
s.mean()
5.0
#
s.sum()
50
#
s.std()
2.581988897471611
#
s.max()
9
#
s.min()
1
#
print(" :",s.quantile(0.25))
print(" :",s.quantile(0.5))
print(" :",s.quantile(0.75))
: 3.25
: 5.0
: 6.75
#
s.cumsum()
0 1
1 3
2 6
3 10
4 15
5 20
6 26
7 33
8 41
9 50
dtype: int64