pandas入門02データ構造
import numpy as np
import pandas as pd
0 pandasデータ構造の概要
pandasは主に以下の3種類のデータ構造*Series*DataFrame*Panelを処理する
これらはnumpyに基づいており、処理速度は比較的速く、最も一般的なのは
DataFrame
である.データ構造
次元#ジゲン#
簡単に述べる
Series
1
1次元配列、サイズは可変ではありませんが、内側の値は可変です.
DataFrame
2
2次元配列、サイズ可変
Panel
3
3次元配列、サイズ可変
次に、この3つのデータ構造について詳しく説明します.
1 Series
Series
は、indexと呼ばれる任意のタイプのデータを保存できる1次元ラベル配列である.1.1コンストラクタ
pandas.Series(data, index, dtype, copy)
コンストラクション関数のパラメータは次のとおりです.
パラメータ
説明
data
データ、例えばndarray、listなど
index
インデックス値は、データの長さと同じ一意でハッシュ可能であることを保証する必要があります.デフォルトではnpが使用されます.arange(n)
dtype
データ型
copy
データのコピー、デフォルトはFalse
1.2 Seriesの作成
1.2.1空のSeriesの作成
s = pd.Series()
print s
Series([], dtype: float64)
1.2.2
list
からSeries
を作成するデフォルトの
index
を使用デフォルトのindex
を使用するには、次のようにします.s = pd.Series([1, 3, 5, np.nan, 6, 8])
print s
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
1.2.3
np.ndarray
からSeries
を作成する以下に示すように、同じ長さの
index
が与えられる.s = pd.Series(np.random.rand(5), index=["a", "b", "c", "d", "e"])
print s
a 0.055684
b 0.697289
c 0.768223
d 0.428101
e 0.748015
dtype: float64
print s.index
Index([u'a', u'b', u'c', u'd', u'e'], dtype='object')
1.2.4 dictからSeriesを作成する
indexが指定されていない場合は、dictの健をindexとして辞書順に取得します.indexが指定されている場合は、指定されたindexに従ってdictからインデックスに対応する値を取得します.
d = {"a": 0., "b": 1., "c": 2.}
s = pd.Series(d)
print s
s = pd.Series(d, index=["b", "c", "d", "a"])
print s
a 0.0
b 1.0
c 2.0
dtype: float64
b 1.0
c 2.0
d NaN
a 0.0
dtype: float64
1.2.5スカラーからSeriesを作成する
この方法ではindexを指定する必要があります.以下に示します.
s = pd.Series(5., index=["a", "b", "c", "d", "e"])
print s
a 5.0
b 5.0
c 5.0
d 5.0
e 5.0
dtype: float64
1.3クラスndarrayアクセスSeries
Series
はnp.ndarray
と非常に類似しており、以下に示すように、ほとんどのNumPyのほとんどの方法または方法を使用してSeriesを操作およびアクセスすることができる.s = pd.Series(np.random.rand(5), index=["a", "b", "c", "d", "e"])
print s
a 0.566958
b 0.548278
c 0.239546
d 0.218399
e 0.322169
dtype: float64
print s[0]
0.566958376402
print s[:3]
a 0.566958
b 0.548278
c 0.239546
dtype: float64
print s[s>s.median()]
a 0.566958
b 0.548278
dtype: float64
print s[[4, 3, 1]]
e 0.322169
d 0.218399
b 0.548278
dtype: float64
print np.exp(s)
a 1.762897
b 1.730271
c 1.270672
d 1.244083
e 1.380118
dtype: float64
print s + s
a 1.133917
b 1.096556
c 0.479092
d 0.436798
e 0.644338
dtype: float64
print s * 2
a 1.133917
b 1.096556
c 0.479092
d 0.436798
e 0.644338
dtype: float64
1.4クラスdictアクセスSeries
以下に示すように、dictのような方法でSeriesにアクセスできます.
print s["a"]
0.566958376402
print "e" in s
True
print "f" in s
False
print s.get("e")
print s.get("f", np.nan)
0.322169102265
nan
2 DataFrame
DataFrame
は、行index
および列columns
を介してデータにアクセスする2次元配列構造である.2.1コンストラクタ
pandas.DataFrame(data, index, columns, dtype, copy)
コンストラクション関数のパラメータは次のとおりです.
パラメータ
説明
data
データ、例えば2-D ndarray、lists、Series、dictまたはその他のDataFrameなど
index
行に対応するラベルは、必ずしも一意ではなく、データの長さと同じです.デフォルトではnpが使用されます.arange(n)
columns
カラムラベルに対応するには、一意でハッシュ可能であることを保証する必要があります.デフォルトではnpが使用されます.arange(n)
dtype
データ型
copy
データのコピー、デフォルトはFalse
2.2 DataFrameの作成
2.2.1 valueがSeriesまたはdictsである辞書から作成
DataFrameのindexは、すべてのSeriesのindexesの並列です.valueがdictの場合、まずSeriesに変換します.columnsが指定されていない場合は、dictのすべてのkeysをcolumnsとして使用します.次のようになります.
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)
print df
one two
a 1.0 1.0
b 2.0 2.0
c 3.0 3.0
d NaN 4.0
df1 = pd.DataFrame(d, index=["d", "b", "a"])
print df1
one two
d NaN 4.0
b 2.0 2.0
a 1.0 1.0
df2 = pd.DataFrame(d, index=["d", "b", "a"], columns=["two", "three"])
print df2
two three
d 4.0 NaN
b 2.0 NaN
a 1.0 NaN
2.2.2 valueがndarraysまたはlistである辞書から作成
d = {"one": [1., 2., 3., 4.],
"two": [4., 3., 2., 1.]}
df = pd.DataFrame(d)
print df
one two
0 1.0 4.0
1 2.0 3.0
2 3.0 2.0
3 4.0 1.0
df1 = pd.DataFrame(d, index=["a", "b", "c", "d"])
print df1
one two
a 1.0 4.0
b 2.0 3.0
c 3.0 2.0
d 4.0 1.0
2.2.3構造化arrayから作成
data = np.zeros((2,), dtype=[("A", "i4"), ("B", "f4"), ("C", "a10")])
data[:] = [(1, 2., "Hello"), (2, 3., "World")]
df1 = pd.DataFrame(data)
print df1
A B C
0 1 2.0 Hello
1 2 3.0 World
df2 = pd.DataFrame(data, index=["first", "second"])
print df2
A B C
first 1 2.0 Hello
second 2 3.0 World
df3 = pd.DataFrame(data, columns=["C", "A", "B"])
print df3
C A B
0 Hello 1 2.0
1 World 2 3.0
2.2.4要素がdictであるリストから作成
data = [{"a": 1, "b": 2}, {"a": 5, "b": 10, "c": 20}]
df1 = pd.DataFrame(data)
print df1
a b c
0 1 2 NaN
1 5 10 20.0
df2 = pd.DataFrame(data, columns=["a", "b"])
print df2
a b
0 1 2
1 5 10
2.2.5リストから作成
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df
0
0 1
1 2
2 3
3 4
4 5
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print df
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13
2.3列の選択、追加、削除
指定したカラムをcolumnで取得
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)
print df["one"]
a 1.0
b 2.0
c 3.0
d NaN
Name: one, dtype: float64
列の追加
df["three"] = df["one"] * df["two"] #
df["flag"] = df["one"] > 2 #
df["foo"] = "bar" # bar
df.insert(1, "bar", df["one"]) #
print df
one bar two three flag foo
a 1.0 1.0 1.0 1.0 False bar
b 2.0 2.0 2.0 4.0 False bar
c 3.0 3.0 3.0 9.0 True bar
d NaN NaN 4.0 NaN False bar
列の削除
del df["two"]
three = df.pop("three")
print df
one bar flag foo
a 1.0 1.0 False bar
b 2.0 2.0 False bar
c 3.0 3.0 True bar
d NaN NaN False bar
2.4行選択、追加および削除
dfのいずれかの行または複数の行を次のように選択できます.
モード
操作
結果
df.loc[label]
行ラベルで選択
Series
df.iloc[loc]
整数インデックスで選択
Series
df[5:10]
複数行を下付きで選択
DataFrame
df[bool_vec]
boolean配列による複数行の選択
DataFrame
df = pd.DataFrame(np.random.randn(10, 4), index=list("abcdefghij"), columns=["A", "B", "C", "D"])
print df
A B C D
a -0.986619 1.526696 -0.268968 -0.092091
b -1.151455 -0.512284 -0.978782 1.043218
c 0.909876 -1.032838 -0.103740 -0.002227
d -1.012738 0.519562 1.472160 -0.334393
e -0.833450 0.402912 -0.586269 -1.501751
f 0.039272 0.759840 -0.688571 -0.686812
g 0.641397 0.162648 -0.969303 1.060234
h -0.119458 0.059383 -1.328667 -0.777637
i 0.093021 -0.235605 0.166218 -0.582874
j 0.462327 -0.435135 -1.953918 0.531841
行の選択
print df.loc["b"]
A -1.151455
B -0.512284
C -0.978782
D 1.043218
Name: b, dtype: float64
print df.iloc[2]
A 0.909876
B -1.032838
C -0.103740
D -0.002227
Name: c, dtype: float64
print df[2:4]
A B C D
c 0.909876 -1.032838 -0.10374 -0.002227
d -1.012738 0.519562 1.47216 -0.334393
print df[[False, True, False, True, False, True, False, False, True, False]]
A B C D
b -1.151455 -0.512284 -0.978782 1.043218
d -1.012738 0.519562 1.472160 -0.334393
f 0.039272 0.759840 -0.688571 -0.686812
i 0.093021 -0.235605 0.166218 -0.582874
追加行
df2 = pd.DataFrame(np.random.randn(2, 4), index=["m", "n"], columns=["A", "B", "C", "D"])
df = df.append(df2)
print df
A B C D
a -0.986619 1.526696 -0.268968 -0.092091
b -1.151455 -0.512284 -0.978782 1.043218
c 0.909876 -1.032838 -0.103740 -0.002227
d -1.012738 0.519562 1.472160 -0.334393
e -0.833450 0.402912 -0.586269 -1.501751
f 0.039272 0.759840 -0.688571 -0.686812
g 0.641397 0.162648 -0.969303 1.060234
h -0.119458 0.059383 -1.328667 -0.777637
i 0.093021 -0.235605 0.166218 -0.582874
j 0.462327 -0.435135 -1.953918 0.531841
m 1.004950 0.522191 -0.071558 -0.615419
n -0.995826 -1.055260 -1.204035 -1.444035
行の削除
df = df.drop("a")
print df
A B C D
b -1.151455 -0.512284 -0.978782 1.043218
c 0.909876 -1.032838 -0.103740 -0.002227
d -1.012738 0.519562 1.472160 -0.334393
e -0.833450 0.402912 -0.586269 -1.501751
f 0.039272 0.759840 -0.688571 -0.686812
g 0.641397 0.162648 -0.969303 1.060234
h -0.119458 0.059383 -1.328667 -0.777637
i 0.093021 -0.235605 0.166218 -0.582874
j 0.462327 -0.435135 -1.953918 0.531841
m 1.004950 0.522191 -0.071558 -0.615419
n -0.995826 -1.055260 -1.204035 -1.444035
2.5転置
df_t = df.T
print df_t
b c d e f g h \
A -1.151455 0.909876 -1.012738 -0.833450 0.039272 0.641397 -0.119458
B -0.512284 -1.032838 0.519562 0.402912 0.759840 0.162648 0.059383
C -0.978782 -0.103740 1.472160 -0.586269 -0.688571 -0.969303 -1.328667
D 1.043218 -0.002227 -0.334393 -1.501751 -0.686812 1.060234 -0.777637
i j m n
A 0.093021 0.462327 1.004950 -0.995826
B -0.235605 -0.435135 0.522191 -1.055260
C 0.166218 -1.953918 -0.071558 -1.204035
D -0.582874 0.531841 -0.615419 -1.444035
3 Panel
あまり使われていないので,しばらく紹介しないで,後で補充しなければならない.