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

