将多个列表放入数据框中

jfa*_*son 139 python numpy pandas

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

尝试1:

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

尝试2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
                                'lst2Tite' : [lst2],
                                'lst3Tite' : [lst3] }, 
                                columns=['lst1Tite','lst1Tite', 'lst1Tite'])
Run Code Online (Sandbox Code Playgroud)
  • 产生一行三列(上面的方式)或者我转置它是3行和1列

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

max*_*moo 241

我认为你几乎就在那里,尝试删除周围的额外方括号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
...
Run Code Online (Sandbox Code Playgroud)

如果你需要一个更高性能的解决方案,你可以使用np.column_stack而不是zip在你的第一次尝试中使用,这个例子在这里的速度提高了2倍,但是在我看来,这有点可读性:

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

  • 如果列表具有不同的数据类型,numpy 列堆栈无法正常工作 (2认同)

Abh*_*pta 42

在这里添加Aditya Guru的答案.不需要使用地图.您可以通过以下方式完成:

pd.DataFrame(list(zip(lst1, lst2, lst3)))
Run Code Online (Sandbox Code Playgroud)

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

pd.DataFrame(list(zip(lst1, lst2, lst3)),
              columns=['lst1_title','lst2_title', 'lst3_title'])
Run Code Online (Sandbox Code Playgroud)

  • 在Python 3.8和Pandas 1.0中,我们不需要使用列表函数,因为DataFrame需要一个可迭代对象,而zip()返回一个可迭代对象。因此,“pd.DataFrame(zip(lst1, lst2, lst3))”也应该这样做。 (4认同)

Adi*_*uru 9

只需使用第一种方法添加它即可 -

pd.DataFrame(list(map(list, zip(lst1,lst2,lst3))))
Run Code Online (Sandbox Code Playgroud)


Viv*_*han 7

添加以上答案,我们可以即时创建

df= pd.DataFrame()
list1 = list(range(10))
list2 = list(range(10,20))
df['list1'] = list1
df['list2'] = list2
print(df)
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 !


oop*_*psi 6

添加了另一种可扩展的解决方案。

lists = [lst1, lst2, lst3, lst4]
df = pd.concat([pd.Series(x) for x in lists], axis=1)
Run Code Online (Sandbox Code Playgroud)

  • 您垂直连接(连接)系列(轴 = 1)以从列表列表中创建 DataFrame (2认同)

小智 6

有多种方法可以从多个列表创建数据框。

list1=[1,2,3,4]
list2=[5,6,7,8]
list3=[9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
  1. pd.DataFrame({'list1':list1, 'list2':list2, 'list3'=list3})

  2. pd.DataFrame(data=zip(list1,list2,list3),columns=['list1','list2','list3'])


dab*_*bru 5

@oopsi 使用pd.concat()但未包含列名称。您可以执行以下操作,与接受的答案中的第一个解决方案不同,它使您可以控制列顺序(避免无序的字典):

import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)

s1=pd.Series(lst1,name='lst1Title')
s2=pd.Series(lst2,name='lst2Title')
s3=pd.Series(lst3 ,name='lst3Title')
percentile_list = pd.concat([s1,s2,s3], axis=1)

percentile_list
Out[2]: 
    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
7           7          7          7
8           8          8          8
...
Run Code Online (Sandbox Code Playgroud)