Pands学習ノート

4628 ワード

Pandsの2つの最も重要なデータ構造はSeriesとDataFrameであり、その約束の引用方式は以下の通りである.
import pandas as pd
from pandas import Series, DataFrame
Series
Seriesは、Numpy 1次元配列に基づいてインデックスindexを追加し、インデックスを介してアクセスしたり、インデックスに基づいてデータを配置したりすることができるようにする.同じ配列で、同じSeriesのデータが同じタイプである必要があります.
Seriesのいくつかのよく使われている属性:obj.values、obj.indexはその中の値とインデックス値を調べるために用いられます.
一次元配列に基づいて構築されているので、一次元配列のスライス動作を継続することができる.
In [2]:
np.random.seed(1)
s = pd.Series(np.random.randn(100))
s[2: 6] 

Out[2]:
2    -0.528172
3    -1.072969
4     0.865408
5    -2.301539
dtype: float64
Seriesを作成する際にindexを指定しないと、デフォルトでは0からの整数値がインデックス値として割り当てられます.インデックス値というのは、indexインデックスを通じて該当位置の値に達することができるということです.
In [3]:
obj = Series([4, 7, -5, 3], index=['d', 'a', 'b', 'c'])
obj

Out[3]:
d    4
a    7
b   -5
c    3
dtype: int64

In [4]:
obj['b']

Out[4]:
-5
索引による値の割り当てと複数の値の取り込みも行います.
In [5]:
obj['d'] = 8
obj[['d', 'c', 'a']]

Out[5]:
d    8
c    3
a    7
dtype: int64
そしてNumpy配列のような論理選択をサポートします.
In [6]:
obj[obj > 2]

Out[6]:
d    8
a    7
c    3
dtype: int64
NumpyとPandsはデータ分析において非常に広く使われているので、両者の互換性は非常に良く、直接にNumpyの多くの方法でSeries:
In [7]:
np.exp(obj)

Out[7]:
d    2980.957987
a    1096.633158
b       0.006738
c      20.085537
dtype: float64
このインデックスと値の関連関係は基本的なpythonデータ構造に反映されます.辞書のキーと値の関係に対応するので、直接辞書でSeriesを作成できます.そして作成したSeriesは辞書のキーに従って自動的に並べられます.
In [8]:
states = {'ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj = Series(states)
obj

Out[8]:
Oregon    16000
Texas     71000
Utah       5000
ohio      35000
dtype: int64
Seriesを調べるために辞書に適した多くの関数を使用することもできます.
In [9]:
'Utah' in obj

Out[9]:
True
インデックス以外に、Series自身とインデックス自体はname属性によって名前を指定することができます.このようにする意味は既存のデータを利用してSeriesを生成することと、異なるSeriesを使用して便利に識別することに含まれる特徴情報とは何ですか?
In [10]:
obj.name = 'population'
obj.index.name = 'state'
obj

Out[10]:
state
Oregon    16000
Texas     71000
Utah       5000
ohio      35000
Name: population, dtype: int64
作成されたインデックス値は、index属性を利用して、割り当てによって変更できます.
In [11]:
obj.index = ['OR', 'TX', 'UT', 'OH']
obj

Out[11]:
OR    16000
TX    71000
UT     5000
OH    35000
Name: population, dtype: int64
ここでindexを修正したら、元のindexの名前がなくなりました.
配置の簡単な例としては、2つのSeriesが数学的演算をするとき、計算はインデックスの同じ項目の間で起こり、同じ位置の項ではなく、2つのSeriesの一定の長さが同じであることが要求されません.
In [13]:
s3 = pd.Series([1, 2, 3], index=['d', 'c', 'b'])
s2 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
s2 + s3

Out[13]:
a    NaN
b    5.0
c    5.0
d    5.0
dtype: float64
これに対応するarrayの演算は位置によって行われ、両者の長さは同じでなければなりません.
Data Frame
Seriesに基づいて、DataFrameはSeriesという名前を付けることによって、複数のSeriesを組み合わせて操作するデータテーブルと見なすことができます.テーブルの行のラベルは索引名で、列のラベルはSeries名で、列名とも呼ばれます.
辞書でDataFrameを作成すると、列名は自動的にアルファベット順に並べられます.
In [14]:
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
frame

Out[14]:
    pop state   year
0   1.5 Ohio    2000
1   1.7 Ohio    2001
2   3.6 Ohio    2002
3   2.4 Nevada  2001
4   2.9 Nevada  2002
作成時に列ラベルの順序を指定することもできます.
In [15]:
DataFrame(data, columns=['year', 'state', 'pop'])

Out[15]:
    year    state   pop
0   2000    Ohio    1.5
1   2001    Ohio    1.7
2   2002    Ohio    3.6
3   2001    Nevada  2.4
4   2002    Nevada  2.9
DataFrameが列ラベルと行ラベルを設定する重要な役割は、ラベルによって対応する列または行にアクセスできることである.
In [3]:
frame['state']

Out[3]:
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
Name: state, dtype: object


In [5]:
frame.loc[3]

Out[5]:
pop         2.4
state    Nevada
year       2001
Name: 3, dtype: object
もう一つの比較的によく使われるDataFrameを作成するデータソースはネストされた辞書で、ネストされた一番外側の層のキーは列ラベルとして使用され、内側のキーは行ラベルとして使用されます.
In [6]:
pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame = DataFrame(pop)
frame

Out[6]:
Nevada  Ohio
2000    NaN 1.5
2001    2.4 1.7
2002    2.9 3.6
DataFrameは同時に転置操作もできます.
In [7]:
frame.T
Out[7]:
2000    2001    2002
Nevada  NaN 2.4 2.9
Ohio    1.5 1.7 3.6
Pandsファイル読み書き
CSV読み込み:pd.read_csv('directoryCauthefile/filename.csv')