Pandasの使い方4

#1 この記事は

DataFrame型データの各種操作方法をメモする。


| 題名 | リンク | 
|:-----------|------------:|
| 【python】Pandasの使い方 |     [LINK](https://qiita.com/NT1123/items/ab1c6dc582684d7d7436) | 
| 【python】Pandas2の使い方 |     [LINK](https://qiita.com/NT1123/items/24e6b848761f83514720) | 
| 【python】Pandas3の使い方 |     [LINK](https://qiita.com/NT1123/items/4bd0fa8cc8254b3b651d) | 
| 【python】Pandas4の使い方 |     [LINK](https://qiita.com/NT1123/items/6e6bcc880aae6f0940ed) | 
| 【python】Pandas5の使い方 |     [LINK](https://qiita.com/NT1123/items/376d3d6eec559a3cd78e) | 
| 【python】Pandas ,pythonコードメモ 6 |     [LINK](https://qiita.com/NT1123/items/d2357e803057699a9a9c) | 

#2 内容

###2-1 DataFrame型の特定の列にて欠損値がある行を取り出す


```python:sample.py
import pandas as pd
import numpy as np

#dataを定義する。
dat = [
    [1,100],
    [2,],
    [3,300],
    [4,400],    
    [5,],
  
]

#datをDataFrame型変数dfに格納する。
df = pd.DataFrame(dat,columns=["A","B"])

display(df)

df1=df[df['B'].isnull()]


print("B列に欠損値がある行のみを抽出する")
display(df1)

```
実行結果

```console
A	B
0	1	100.0
1	2	NaN
2	3	300.0
3	4	400.0
4	5	NaN
B列に欠損値がある行のみを抽出する
A	B
1	2	NaN
4	5	NaN
```


###2-2 For文,list型結合

listsに\nが混在している。\nにてデータを分離し新しいlistを作る

```python:sample.py
lists=['7201', '8524', '1605\n5020', '7201', '9432']
tmplist=[]

for list in lists:

    tmplist.extend(list.split("\n"))


tmplist

```
実行結果

```console
['7201', '8524', '1605', '5020', '7201', '9432']
```

###2-3 List型要素をstr型からint型に変更する。

listsに\nが混在している。\nにてデータを分離し新しいlistを作る

```python:sample.py
ls = ["10", "20", "30", "40", "50"]
print(ls)

ls = [int(i) for i in ls] # ここでリストの中の値をint型へ変換しています。
print(ls)
```
実行結果

```console
['10', '20', '30', '40', '50']
[10, 20, 30, 40, 50]
```


###2-4 index値を指定し、DataFrameの行を抽出する



```python:sample.py
import pandas as pd


dat0 = [
    ['2019-07-01','9997','740'],
    ['2019-07-02','9997','749'],
    ['2019-07-03','9997','757'],
]

df0 = pd.DataFrame(dat0,columns=["A","B","C"])

display(df0)

#A,B列をindexに指定する。
df0=df0.set_index(["A"])


print("index='2019-07-01'の行を抽出する")

display(df0.loc[['2019-07-01']])

```
実行結果

```console
	A	B	C
0	2019-07-01	9997	740
1	2019-07-02	9997	749
2	2019-07-03	9997	757
index='2019-07-01'の行を抽出する
B	C
A		
2019-07-01	9997	740
```


###2-5 dict型配列を結合させる。



```python:sample.py
import pandas as pd
import numpy as np

col=["X","Y","Z"]


dict1={col[0]:[1,2,3],col[1]:[4,5,6]}
dict2={col[2]:[7,8,9]}
dict2.update(dict1)

print("dict2")
print(dict2)

```
実行結果

```console
#"dict型配列を結合させる"

dict2
{'Z': [7, 8, 9], 'X': [1, 2, 3], 'Y': [4, 5, 6]}

```


###2-6 List型を転置する

```python:sample.py
import pandas as pd
import numpy as np


ex1=[[1,2,3],[4,5,6]]

ex2=np.array(ex1)

print("ex1:")
print(ex1)
print("ex2:")
print(ex2)
```
実行結果

```console
ex1:
[[1, 2, 3], [4, 5, 6]]
ex2:
[[1 2 3]
 [4 5 6]]

```


###2-7 くり返し処理において要素と添え字を同時取得する

```python:sample.py
list1 = ['item1', 'item2', 'item3']
for index, item in enumerate(list1):
    print("インデックス：" + str(index) + ", 値：" + item)
```
実行結果

```console
インデックス：0, 値：item1
インデックス：1, 値：item2
インデックス：2, 値：item3

```

###2-8 Dict型変数をDataFrame型に変換する

```python:sample.py
import pandas as pd
import numpy as np


dict1={"X":[1,2,3],"Y":[4,5,6]}

print("dict型変数 dict1を表示する")
print(dict1)

dict1=pd.DataFrame(dict1,columns=['X', 'Y'])

print("DataFrane型 dict1を表示する")
display(dict1)
```
実行結果

```console
dict型変数 dict1を表示する
{'X': [1, 2, 3], 'Y': [4, 5, 6]}

DataFrane型 dict1を表示する

X	Y
0	1	4
1	2	5
2	3	6
```

###2-9 2次元配列の作り方

```python:sample.py
import pandas as pd
import numpy as np

print("list型変数を用意する。")
li=[[1, 2, 3], [4, 5, 6]]
print(li)

print("list型変数を2次元配列に変換する。")
ex=np.array(li) # これで2-dimensional array(2次元配列)
print(ex)
```
実行結果

```console
list型変数を用意する。
[[1, 2, 3], [4, 5, 6]]
list型変数を2次元配列に変換する。
[[1 2 3]
 [4 5 6]]
```

### 2-10 DataFrameをList型に変換する。

```python:/home/sampletest/sample.py
import numpy as np
import pandas as pd


dat = [
    ['2019-07-01','9990'],
    ['2019-07-02','9991'],
    ['2019-07-03','9992'],
    ['2019-07-04','9993'],
    ['2019-07-05','9995'],
    ['2019-07-08','9996']
]
df0 = pd.DataFrame(dat,columns=["A","B"])

print(df0)

#DataFrameをList型に変換している。
df0_list=df0['B'].values.tolist()
print(df0_list)

```

実行結果

```consol
df0
            A     B
0  2019-07-01  9990
1  2019-07-02  9991
2  2019-07-03  9992
3  2019-07-04  9993
4  2019-07-05  9995
5  2019-07-08  9996
df0_list
['9990', '9991', '9992', '9993', '9995', '9996']
```