Pandas(2) データ構造(DataFrame)

# データ構造

## DataFrame
DataFrameは、潜在的には異なる方の列を持つ2次元のlabel付きデータ構造であり、一般的に最も使われるpandasオブジェクト。Seriesと同様に、DataFrameはさまざまな種類の入力を受け入れる。
データとともに、オプションで`index`(行ラベル)および`columns`(列ラベル)を渡すことができる。

### 配列からのDataFrameへの変換

```Python:
array = []
array.append([1, 2, 3])
array.append([4, 5, 6])
array.append([7, 8, 9])
df = pd.DataFrame(array, columns=['a', 'b', 'c'])
df
```

![DataFrame_01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/ccda74f9-71c9-e14f-d988-b411767e4991.jpeg)

### From dict of Series or dicts
結果のindexは、さまざまなSeriesのindexの和集合になる。入れ子になった辞書があれば、それらは最初にSeriesに変換される。列が渡されない場合、列は辞書キーの順序付きリストになる。

```Python:
import pandas as pd
import numpy as np

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)
```
![pandas_image_01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/702fe8f0-e895-78df-8d2b-b856e94a678b.jpeg)

```Python:
pd.DataFrame(d, index=['d', 'b', 'a'])
```
![pandas_image_02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/8e317db1-d9f8-4d0d-341d-8f298ac0307b.jpeg)

```Python:
pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])
```
![pandas_image_03.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/5d5eb945-c8fb-b721-eb71-5c881980263f.jpeg)

行ラベルと列ラベルはそれぞれ`index`属性と`columns`属性でアクセスすることができる。

```Python:
print(df.index)
print(df.columns)
```
> Index(['a', 'b', 'c', 'd'], dtype='object')
> Index(['one', 'two'], dtype='object')

### From dict of ndarrays / lists
ndarrayは全て同じ長さの必要がある。`index`が渡される場合は、それも配列と同じ長さにする。

```Python:
import pandas as pd
import numpy as np

d = {'one': [1., 2., 3., 4.],
     'two': [4., 3., 2., 1.]}
df = pd.DataFrame(d)
```
![pandas_image_04.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/063095db-a8f8-34f0-ed98-0de683703cc8.jpeg)

```Python:
d = {'one': [1., 2., 3., 4.],
     'two': [4., 3., 2., 1.]}
df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
```
![pandas_image_05.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/41f6f025-bb04-4521-b900-2105e221cffa.jpeg)

### From structured or record array

```Python:
data = np.zeros((2, ), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
data[:] = [(1, 2., 'Hello'), (2, 3., "World")]
df = pd.DataFrame(data, index=['first', 'second'],columns=['C', 'A', 'B'])
```
![pandas_image_06.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/0e73a3c7-9c02-285c-586b-d5c2a48c494e.jpeg)

### From a list of dicts

```Python:
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'],columns=['a', 'b'])
```
![pandas_image_07.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/3ea1911a-82a3-6872-de8c-c12201d08185.jpeg)

### From a dict of tuples

```Python:
import pandas as pd
import numpy as np

df = pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
              ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
              ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
              ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
              ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})
```
![pandas_image_08.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/ea54f78e-5c3d-f828-9822-e5c42f0ff18b.jpeg)