我正在嘗試使用多個串列串列將行添加到資料框中。
錯誤如下: IndexError: 標量變數的索引無效。
代碼如下:
List_a = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]
List_b = [[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30]]
List_c = [[31,32,33],[34,35,36],[37,38,39],[40,41,42],[43,44,45]]
Some_List = ['0', '1', '2', '3', '4']
first_row = {'A': [0], 'B': [0], 'C': [0]}
All_Rows = pd.DataFrame(first_row)
#Optimized_Trades
for i in range(len(Some_List)):
for j in range(len(Some_List[i])):
df_temp = { 'A': List_a[i][j], 'B': List_b[i][j], 'C': List_c[i][j]}
All_Rows = All_Rows.append(df_temp, ignore_index = True)
All_Trades = All_Trades[1:]
display(All_Trades)
理想情況下,最終輸出將是:
A B C
1 16 31
2 17 32
3 18 33
4 19 34
5 20 35
6 21 36
7 22 37
8 23 38
9 24 39
10 25 40
11 26 41
12 27 42
13 28 43
14 29 44
15 30 45
uj5u.com熱心網友回復:
您可以使用itertools.chain扁平化每個串列,使用扁平化串列構建字典并將其轉換為 DataFrame:
from itertools import chain
A, B, C = [list(chain.from_iterable(lst)) for lst in [List_a, List_b, List_c]]
out = pd.DataFrame({'A': A, 'B': B, 'C': C})
輸出:
A B C
0 1 16 31
1 2 17 32
2 3 18 33
3 4 19 34
4 5 20 35
5 6 21 36
6 7 22 37
7 8 23 38
8 9 24 39
9 10 25 40
10 11 26 41
11 12 27 42
12 13 28 43
13 14 29 44
14 15 30 45
uj5u.com熱心網友回復:
看來您需要range(3),因為子串列的長度是3:
for i in range(len(Some_List)):
for j in range(3):
df_temp = { 'A': List_a[i][j], 'B': List_b[i][j], 'C': List_c[i][j]}
All_Rows = All_Rows.append(df_temp, ignore_index = True)
或者您可以通過List_awith回圈enumarate,因此內部回圈使用子串列的實際長度:
for i, vals in enumerate(List_a):
for j, vals1 in enumerate(vals):
df_temp = { 'A': List_a[i][j], 'B': List_b[i][j], 'C': List_c[i][j]}
All_Rows = All_Rows.append(df_temp, ignore_index = True)
如果只需要展平串列:
L = [List_a, List_b, List_c]
df = pd.DataFrame([[z for y in x for z in y] for x in L], index = ['A','B','C']).T
print (df)
A B C
0 1 16 31
1 2 17 32
2 3 18 33
3 4 19 34
4 5 20 35
5 6 21 36
6 7 22 37
7 8 23 38
8 9 24 39
9 10 25 40
10 11 26 41
11 12 27 42
12 13 28 43
13 14 29 44
14 15 30 45
uj5u.com熱心網友回復:
編輯:根據您固定的預期輸出,試試這個 -
- 將所有串列串列存盤為串列
l - 接下來,將它們直接添加到一個資料框,該資料框
df將是一個具有 5 列和 3 行的資料框。 - 轉置
- 在每一列上使用explode
- 重命名列
List_a = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]
List_b = [[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30]]
List_c = [[31,32,33],[34,35,36],[37,38,39],[40,41,42],[43,44,45]]
l = [List_a, List_b, List_c]
df = pd.DataFrame(l).T
output = df.explode(list(df.columns))
output.columns = ['A','B','C']
print(output)
A B C
0 1 16 31
0 2 17 32
0 3 18 33
1 4 19 34
1 5 20 35
1 6 21 36
2 7 22 37
2 8 23 38
2 9 24 39
3 10 25 40
3 11 26 41
3 12 27 42
4 13 28 43
4 14 29 44
4 15 30 45
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415240.html
標籤:
