我如何采取多个列表,并把它们作为不同的列在一个python数据框架?我试过这个办法,但遇到了一些麻烦。

尝试1:

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

尝试2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
                                'lst2Tite' : [lst2],
                                'lst3Tite' : [lst3] }, 
                                columns=['lst1Tite','lst1Tite', 'lst1Tite'])

产生一行3列(上面的方式),或者如果我转置它是3行1列

我如何得到一个100行(每个独立列表的长度)由3列(三个列表)熊猫数据框架?


当前回答

加上上面的答案,我们可以在飞行中创造

df= pd.DataFrame()
list1 = list(range(10))
list2 = list(range(10,20))
df['list1'] = list1
df['list2'] = list2
print(df)

希望能有所帮助!

其他回答

@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
...

我认为你已经差不多了,试着去掉lst's周围的额外方括号(当你从这样的字典创建一个数据框架时,你不需要指定列名):

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'])

只是补充一下,使用第一种方法,它可以这样做

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

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

list1=[1,2,3,4]
list2=[5,6,7,8]
list3=[9,10,11,12]

pd。DataFrame({'list1':list1, 'list2':list2, 'list3'=list3}) pd.DataFrame (data = zip (list1、用于list3),列=[“list1”、“用于”,' list3 '])

添加一个可伸缩的解决方案。

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