Python 二次元配列の操作方法

# はじめに
プログラミング初心者です。
Pythonで、二次元配列を操作するときに調べたものを忘れないように自分用にまとめました。
二次元配列だけでなく、初歩的な内容も含まれています。


## 空文字の判定と、文字列の数字を数値に変換する
```python
data = [[ "a", "", "c"],
        [ "", "1", "f"],
        [ "g", "2", "i"]]

for i in range(len(data)):
    if bool(data[i][1]):
        print(int(data[i][1]))
    else:
        print("空文字")
# 空文字  ""は空文字
# 1  "1"が 1 に変換
# 2  "2"が 2 に変換
```
 - `bool("〇〇")`で〇〇が文字列(または数値)の時はtrue、空文字の時はfalseが返る
 - `int("123")`で`"123"`を数値`123`に変換する
 - `str(123)`で`123`を文字列`"123"`に変換する
 - `len(〇〇)`で〇〇の長さを返す 
```python
print(len("abcde"))
# 5　文字列の長さを返す
print(len(data))
# 3  二次元配列の行数を返す
print(len(123))
# エラー　数値はエラーになる
```
 - 二次元配列のループで行の繰り返し変数＝index（行番号）にしたいときは
`for i in range(len(data)):`とすると　iの数＝行番号として使える
 - `for i in range(△):`だと△回繰り返しできる



## 二次元配列の末尾にリストを追加する 
```python
data = [[ "a", "", "c"],
        [ "", "1", "f"],
        [ "g", "2", "i"]]

data.append([ "j", "k", "l"])
print(data)

# [[ "a", "", "c"],
#  [ "", "1", "f"],
#  [ "g", "2", "i"],
#  [ "j", "k", "l"]]
```
 - `data.append(リスト)`で二次元配列の末尾にリストを追加する


## 二次元配列をフィルターする
```python
data1 = [[ "太郎", "りんご", "3個"],
        [ "次郎", "みかん", "5個"],
        [ "三郎", "いちご", "10個"]]

list1 = list(filter(lambda x: x[0]=="太郎", data1))
print(list1) 

# [['太郎', 'りんご', '3個']]
```
 - `list(filter(lambda x: x[0]=="太郎", data1))`でフィルターできる
 `x[0]`の数字が列の位置　`"太郎"`が条件  `data1`が二次元配列
### 【応用】二次元配列のループの中で別の二次元配列をフィルターする
```python
data1 = [[ "太郎", "りんご", "3個"],
        [ "次郎", "みかん", "5個"],
        [ "三郎", "いちご", "10個"]]

data2 = [[ "みかん", "愛媛県"],
        [ "りんご", "青森県"],
        [ "すいか", "熊本県"]]

for i in range(len(data1)):
    list1 = list(filter(lambda x: x[0] == data1[i][1], data2))
    if len(list1) > 0:
        print(list1[0][1])

    else:
        print("該当なし") 

# 青森県　data2をりんごでフィルターした時の都道府県
# 愛媛県　data2をみかんでフィルターした時の都道府県
# 該当なし data2をいちごでフィルターした時の都道府県（存在しない）
```
 - `len(list(filter(lambda x: x[0] == data1[i][1], data2)))`でフィルターした二次元配列の長さを返す
 
## CSVの処理
### CSVの読込
```python
import pandas as pd
data3 = pd.read_csv("〇〇〇〇〇.csv", encoding = "utf_8",
                   na_filter=False, usecols=[1, 2, 3, 5]).values.tolist()
```
 - `pandas`を使用する
 - `pd.read_csv("〇〇〇〇〇.csv").values.tolist()`でCSVを読み込める
 - `encoding = "utf_8"`でエンコードを指定できる
 - `na_filter=False`でnull値を空文字`""`に変換して読み込むことができる
 - `usecols=[1, 2, 3, 5]`で読み込む列を指定できる

### CSVに書込
```python
import csv
with open("〇〇〇〇〇.csv", "w", newline="", encoding = "utf_8") as f:
    writer = csv.writer(f)
    writer.writerows(data3)
```
 - `encoding = "utf_8"`でエンコードを指定できる
 - `"w"`で上書き、`"a"`で既存のファイルに追記できる

# おわりに
どの言語でも使用する二次元配列の操作で、主に自分がよく使いそうなものを中心にまとめました。
また、null値、空文字、数字(数値)、文字列がごちゃ混ぜになっている二次元配列を操作する可能性を考えて、Pythonでのnullや空文字の判定方法についても調査しました。


# 参考サイト
- [空文字列の判定](https://note.nkmk.me/python-str-num-determine/#strisdigit
)
 - [for文の中でrange関数を使って指定した回数だけ繰り返し処理を行う](https://www.javadrive.jp/python/for/index5.html)
 - [Python でヘッダーのある csv ファイルをつくる](https://www.mathpython.com/python-csv-write-header)
 - [【Python】pandas.read_csvの列指定](https://qiita.com/thistle_/items/820f44f040a64702ece6)
 - [Python　CSVファイルを二次元配列に格納する方法３選！](https://note.com/socras/n/n45170161a116)
 - [python|二次元配列にフィルターをかける最も簡単な方法](
https://ottershiba.com/python%E4%BA%8C%E6%AC%A1%E5%85%83%E9%85%8D%E5%88%97%E3%81%AB%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%9C%80%E3%82%82%E7%B0%A1%E5%8D%98%E3%81%AA%E6%96%B9/)