DataFrameに変換しようとしているnumpy配列のリストがあります。各配列はデータフレームの行である必要があります。
Pd.DataFrame()を使用しても機能しません。常にエラーが発生します:ValueError:2-d入力を渡す必要があります。
これを行うためのより良い方法はありますか?
これは私の現在のコードです:
list_arrays = array([[0, 0, 0, 1, 0, 0, 0, 0, 00]], dtype=uint8), array([[0, 0, 3, 2, 0, 0, 0, 0, 00]], dtype=uint8)]
d = pd.DataFrame(list_of_arrays)
ValueError: Must pass 2-d input
オプション1:
_In [143]: pd.DataFrame(np.concatenate(list_arrays))
Out[143]:
0 1 2 3 4 5 6 7 8
0 0 0 0 1 0 0 0 0 0
1 0 0 3 2 0 0 0 0 0
_
オプション2:
_In [144]: pd.DataFrame(list(map(np.ravel, list_arrays)))
Out[144]:
0 1 2 3 4 5 6 7 8
0 0 0 0 1 0 0 0 0 0
1 0 0 3 2 0 0 0 0 0
_
なぜ私は得る:
_
ValueError: Must pass 2-d input
_
pd.DataFrame()
は次のようにNDArrayに変換しようとすると思います。
_In [148]: np.array(list_arrays)
Out[148]:
array([[[0, 0, 0, 1, 0, 0, 0, 0, 0]],
[[0, 0, 3, 2, 0, 0, 0, 0, 0]]], dtype=uint8)
In [149]: np.array(list_arrays).shape
Out[149]: (2, 1, 9) # <----- NOTE: 3D array
_
pd.DataFrame(sum(map(list, list_arrays), []))
0 1 2 3 4 5 6 7 8
0 0 0 0 1 0 0 0 0 0
1 0 0 3 2 0 0 0 0 0
pd.DataFrame(np.row_stack(list_arrays))
0 1 2 3 4 5 6 7 8
0 0 0 0 1 0 0 0 0 0
1 0 0 3 2 0 0 0 0 0
ここに一つの方法があります。
import numpy as np, pandas as pd
lst = [np.array([[0, 0, 0, 1, 0, 0, 0, 0, 0]], dtype=int),
np.array([[0, 0, 3, 2, 0, 0, 0, 0, 0]], dtype=int)]
df = pd.DataFrame(np.vstack(lst))
# 0 1 2 3 4 5 6 7 8
# 0 0 0 0 1 0 0 0 0 0
# 1 0 0 3 2 0 0 0 0 0
pd.Series
を使用できます
pd.Series(l).apply(lambda x : pd.Series(x[0]))
Out[294]:
0 1 2 3 4 5 6 7 8
0 0 0 0 1 0 0 0 0 0
1 0 0 3 2 0 0 0 0 0