pandas入門02データ構造

20678 ワード

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アクセスSeriesSeriesnp.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
あまり使われていないので,しばらく紹介しないで,後で補充しなければならない.