[Python学習その３]pandasのDataFrameとSeries、標準のListを相互に変換する

# 始めに
- pandasで使われるDataFrameとSeries,標準のlistを相互に変換したい
- pandasで加工したデータを他ライブラリで使う時、listしか対応していないことがあるので、困らないように

## 作業環境
- OS：macOS Catalina ver10.15.6
- コードエディター：jupyter lab
- 言語：python3

## 参考サイト
- [pandas.DataFrame, SeriesとPython標準のリストを相互に変換](https://note.nkmk.me/python-pandas-list/)
- [Pandasユーザーガイド「データの索引と選択」（公式ドキュメント日本語訳）](https://qiita.com/nkay/items/d322ed9d9a14bdbf14cb#%E5%9F%BA%E6%9C%AC)
- [pandas documentation](https://pandas.pydata.org/docs/index.html)


## 実際にやってみる
- listからdataframe,seriesに変換する
- seriesからlistに変換する
- dataframeからlist,seriesに変換する

### listからdataframe,seriesに変換する
#### list→series
```python
#pandasをインポートしてpdに名前変更
import pandas as pd
#標準ライブラリのリストを作成からの表示
l_1d = [0, 1, 2]
l_1d

#[0, 1, 2]
```

```python
#次はlistをseriesに型変換する
s = pd.Series(l_1d)
s

#0    0
#1    1
#2    2
#dtype: int64
#何も指定しないとindexは0から自動で決まる
```

```python
#次はindexを指定しながらlistからseries型に変換する
s = pd.Series(l_1d, index=['row1', 'row2', 'row3'])
s

#row1    0
#row2    1
#row3    2
#dtype: int64
```

```python
#一気にindexまで指定することもできる
#今回の記事とは関係ないけど、以外と使うかも
s = pd.Series({"row1":0,"row2":1,"row3":2})
s

#row1    0
#row2    1
#row3    2
#dtype: int64
```

#### list→dataframe
```python
#データーフレームに変換するので2次元配列を用意する
l_2d = [[0, 1, 2], [3, 4, 5]]

df = pd.DataFrame(l_2d)
df

#	1	2
#0	0	1	2
#1	3	4	5
```

```python
#index,columnの両方を指定してdataframeを作成することも可能
df = pd.DataFrame(l_2d,
                  index=['row1', 'row2'],
                  columns=['col1', 'col2', 'col3'])
df

#	col1	col2	col3
#row1	0	1	2
#row2	3	4	5
```

```python
#一気にindex,columnまで指定することもできる
#今回の記事とは関係ないけど、以外と使うかも
df = pd.DataFrame([[1,2,3],[4,5,6]],["row1","row2"],["col1","col2","col3"])
df

#	col1	col2	col3
#row1	1	2	3
#row2	4	5	6
```

### seriesからlistに変換する
#### series→list
```python
#まずはseriesを作成する
s = pd.Series([0, 1, 2])
print(s)

# 0    0
# 1    1
# 2    2
# dtype: int64
```

```python
#seriesの値だけlist型で取得する
l_1d = s.values.tolist()
print(l_1d)

#[0, 1, 2]
```

### dataframeからlist,seriesに変換する
#### dataframe→list
```python
#dataframeを作成
df = pd.DataFrame([[0, 1, 2], [3, 4, 5]])
print(df)

#   0  1  2
#0  0  1  2
#1  3  4  5
```

```python
#dataframeの値だけをlist型で取得する
#indexやcolumnsは無視される
l_2d = df.values.tolist()
print(l_2d)

#[[0, 1, 2], [3, 4, 5]]
```

```python
#dataframeをlist型で取得すると２次元配列になる
#２次元を１次元配列に変換する方法
#関係ないけどあったらいつか使うかも？

#numpyを使うのでインポートします
import numpy as np
#標準ライブラリのlist型からarray型に変換
#どちらも配列です
arr_list = np.array(l_2d)
arr_list.flatten().tolist()

#[0, 1, 2, 3, 4, 5]
```

#### dataframe→series
```python
#dataframeを作成する
df = pd.DataFrame([[0, 1, 2], [3, 4, 5]],["row1","row2"],["col1","col2","col3"])
print(df)

#      col1  col2  col3
#row1     0     1     2
#row2     3     4     5
```

```python
#columnをseriesとして取得する
df_toSer = df["col1"]
df_toSer

#row1    0
#row2    3
#Name: col1, dtype: int64
```

```python
#indexをseriesとして取得する
df_toSer2 = df.iloc[0]
df_toSer2

#col1    0
#col2    1
#col3    2
#Name: row1, dtype: int64
```

# 終わりに
今回参考にしたサイトになります。
- [pandas.DataFrame, SeriesとPython標準のリストを相互に変換](https://note.nkmk.me/python-pandas-list/)
- [Pandasユーザーガイド「データの索引と選択」（公式ドキュメント日本語訳）](https://qiita.com/nkay/items/d322ed9d9a14bdbf14cb#%E5%9F%BA%E6%9C%AC)
- [pandas documentation](https://pandas.pydata.org/docs/index.html)