【问题标题】:how to append a list of of lists with different lengths如何附加不同长度的列表列表
【发布时间】:2022-01-19 13:10:25
【问题描述】:

我正在尝试使用列表列表向数据框添加行。

错误如下: IndexError: 标量变量的索引无效。

代码如下:

Total_List = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]

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': Total_List[i][j], 'B': Total_List[i][j], 'C': Total_List[i][j]}
        All_Rows = All_Rows.append(df_temp, ignore_index = True)

All_Trades = All_Trades[1:]
        
display(All_Trades)

理想情况下,最终输出是:

1,4,7,10,13
2,5,8,11,14
3,6,9,12,15

【问题讨论】:

  • list_alist_blist_c 是什么?你能发布错误的完整回溯吗?
  • 感谢您指出此错误。我已经纠正了它。如果还有什么我可以澄清的,请告诉我,我知道事情无处不在。
  • 试试pd.DataFrame(Total_List).Tpd.DataFrame(zip(* Total_List))).. 更多详情请看我下面的回答。

标签: python pandas dataframe


【解决方案1】:

IIUC,你想将每个子列表的每个first, second ... nth元素添加为数据框的行,相当于transpose of the list of lists的数据框。

在 python 中你不需要 for 循环来执行此操作。

使用 zip 和解包操作符

您可以通过几种方式做到这一点,但一种方式是 zipunpacking operator * 使用 list(zip(*l))

l = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]

lt = pd.DataFrame(zip(*l)) #<---
print(lt)
   0  1  2   3   4
0  1  4  7  10  13
1  2  5  8  11  14
2  3  6  9  12  15

使用 pandas 转置

更简单的方法是使用 pandas 来执行此操作,您只需使用 transpose -

l = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]

lt = pd.DataFrame(l).T  #<---
print(lt)
   0  1  2   3   4
0  1  4  7  10  13
1  2  5  8  11  14
2  3  6  9  12  15

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多