list、numpy、pandas の2次元配列の相互変換をまとめます。
参考サイトを載せておきます。
ndarray の公式ドキュメント
pandas.DataFrame の公式ドキュメント
2次元の相互変換をまとめておく
相互変換を図にしました。
list型とndarray型
li = [[1, 2, 3], [4, 5, 6]] print(li) print(type(li)) # [[1, 2, 3], [4, 5, 6]] # <class 'list'> # list型をndarray型に変換 nda = np.array(li) print(nda) print(type(nda)) # [[1 2 3] # [4 5 6]] # <class 'numpy.ndarray'> # ndarray型をlist型に変換 li = nda.tolist() print(li) print(type(li)) # [[1, 2, 3], [4, 5, 6]] # <class 'list'>
list型とpandas.DataFrame型
残念ながら、2次元の場合はpandas.DataFrame型から一気にlist型へ変換できません。
ndarrayを経由して変換する必要があります。
li = [[1, 2, 3], [4, 5, 6]] print(li) print(type(li)) # [[1, 2, 3], [4, 5, 6]] # <class 'list'> # list型をDataFrame型に変換 df = pd.DataFrame(li) print(df) print(type(df)) # 0 1 2 # 0 1 2 3 # 1 4 5 6 # <class 'pandas.core.frame.DataFrame'> # DataFrame型を、ndarray型を経由して、list型に変換 li = df.to_numpy().tolist() print(li) print(type(li)) # [[1, 2, 3], [4, 5, 6]] # <class 'list'>
ndarray型とpandas.DataFrame型
pandas.DataFrame型をndarray型にする方法は2つあります。
# 2次元のndarray型はreshapeでも作成できる。 nda = np.array([1, 2, 3, 4, 5, 6]) nda = nda.reshape(2, 3) print(nda) print(type(nda)) # [[1 2 3] # [4 5 6]] # <class 'numpy.ndarray'> # ndarray型をpd.DataFrame型に変換 df = pd.DataFrame(nda) print(df) print(type(df)) # 0 1 2 # 0 1 2 3 # 1 4 5 6 # <class 'pandas.core.frame.DataFrame'> # pd.DataFrame型をndarray型に変換 nda = df.to_numpy() print(nda) print(type(nda)) # [[1 2 3] # [4 5 6]] # <class 'numpy.ndarray'> # pd.DataFrame型をndarray型に変換 nda = df.values print(nda) print(type(nda)) # [[1 2 3] # [4 5 6]] # <class 'numpy.ndarray'>
list型から、Index、カラム名付きのDataFrame型へ変換
list 型からカラム名付きのDataFrame型への変換です。
# list型を、カラム名付きのDataFrame型に変換する。 # 名前と身長が書かれたリスト li = [['Mike', 164], ['Ken', 173], ['Vanessa', 181]] # カラム名付きでDataFrame型に変換する。 df = pd.DataFrame(li, columns=['Name', 'Height']) print(df) # Name Height # 0 Mike 164 # 1 Ken 173 # 2 Vanessa 181
list型から、Indexとカラム名付きのDataFrame型への変換です。
一気に変換できず段階を踏む必要があります。
# list型を、Indexとカラム名付きのDataFrame型に変換する。 # 名前と身長と出身国が書かれたリスト li = [['Mike', 164, 'US'], ['Ken', 173, 'JP'], ['Vanessa', 181, 'UK']] # 一旦、カラム名付きのDataFrame型に変換する。 # 名前をIndexとして、カラム名付きでDataFrame型に変換する。 df = pd.DataFrame(li, columns=['Name', 'Height', 'Country']) print(df) # Name Height Country # 0 Mike 164 US # 1 Ken 173 JP # 2 Vanessa 181 UK # "Name"のカラムをIndexにして、元Indexの通し番号は削除する。 df = df.set_index('Name', drop=True) print(df) # Height Country # Name # Mike 164 US # Ken 173 JP # Vanessa 181 UK
list型から、Indexとカラム名付きのDataFrame型への変換です。
これもあまりきれいな変換とは言えないです。
# list型を、Indexとカラム名付きのDataFrame型に変換する。 # 名前と身長と出身国が書かれたリスト li = [['Mike', 164, 'US'], ['Ken', 173, 'JP'], ['Vanessa', 181, 'UK']] # 名前をIndexにして、他の情報をカラムに入れる。 df_tmp = pd.DataFrame(li) df = pd.DataFrame( df_tmp.iloc[:, 1:].to_numpy(), columns=['Height', 'Country'], index=df_tmp[0]) print(df) # Height Country # 0 # Mike 164 US # Ken 173 JP # Vanessa 181 UK # Index名を付ける。 df.index.name = 'Name' print(df) # Height Country # Name # Mike 164 US # Ken 173 JP # Vanessa 181 UK