将多个列表转换成数据框

2024-03-29 06:10:13 发布

您现在位置:Python中文网/ 问答频道 /正文

如何获取多个列表并将它们作为不同的列放在python数据帧中?我试过this solution但遇到了一些麻烦。

尝试1:

  • 有三个列表,并将它们压缩在一起并使用它res = zip(lst1,lst2,lst3)
  • 只产生一列

尝试2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
                                'lst2Tite' : [lst2],
                                'lst3Tite' : [lst3] }, 
                                columns=['lst1Tite','lst1Tite', 'lst1Tite'])
  • 生成一行三列(如上图所示)或者如果我将其转置为三行一列

如何获得一个100行(每个独立列表的长度)乘以3列(三个列表)的pandas数据帧?


Tags: 数据dataframe列表reszipthislistpd
3条回答

只是补充说,使用第一种方法,它可以做为-

pd.DataFrame(list(map(list, zip(lst1,lst2,lst3))))

在这里添加到Aditya Guru的答案。不用地图。你只需:

pd.DataFrame(list(zip(lst1, lst2, lst3)))

这将把列的名称设置为0,1,2。要设置自己的列名,可以将关键字参数columns传递给上面的方法。

pd.DataFrame(list(zip(lst1, lst2, lst3)),
              columns=['lst1_title','lst2_title', 'lst3_title'])

我想你就快到了,试着去掉lst旁边多余的方括号(同样,当你从这样的dict创建数据帧时,不需要指定列名):

import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)
percentile_list = pd.DataFrame(
    {'lst1Title': lst1,
     'lst2Title': lst2,
     'lst3Title': lst3
    })

percentile_list
    lst1Title  lst2Title  lst3Title
0          0         0         0
1          1         1         1
2          2         2         2
3          3         3         3
4          4         4         4
5          5         5         5
6          6         6         6
...

如果您需要一个性能更好的解决方案,您可以使用np.column_stack,而不是像第一次尝试那样使用zip,这在这里的示例中有大约2倍的加速,但是在我看来,这是以可读性为代价的:

import numpy as np
percentile_list = pd.DataFrame(np.column_stack([lst1, lst2, lst3]), 
                               columns=['lst1Title', 'lst2Title', 'lst3Title'])

相关问题 更多 >