numpy 将多个列表放入 Dataframe

dpiehjr4  于 2022-11-10  发布在  其他
关注(0)|答案(9)|浏览(224)

如何获取多个列表并将它们作为不同的列放在一个Python Dataframe 中?我尝试了this solution,但遇到了一些问题。
尝试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列(三个列表)的Pandas Dataframe ?

vaj7vani

vaj7vani1#

我想你已经差不多了,试着去掉lst周围的额外方括号(当你从这样的字典创建 Dataframe 时,你也不需要指定列名):

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

tpxzln5u2#

在这里补充Aditya Guru的答案。不需要使用map。您可以简单地通过以下方式完成:

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

wa7juj8i3#

再添加一个可扩展的解决方案。

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

kupeojn64#

只是补充说,使用第一种方法可以做到以下几点-

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

pdtvr36n5#

有几种方法可以从多个列表创建 Dataframe 。

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

1.pd.DataFrame({'list1':list1, 'list2':list2, 'list3'=list3})
1.pd.DataFrame(data=zip(list1,list2,list3),columns=['list1','list2','list3'])

tp5buhyn

tp5buhyn6#

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

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

希望它能帮上忙!

qacovj5a

qacovj5a7#

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

de90aj5v8#

您只需使用以下代码即可

train_data['labels']= train_data[["LABEL1","LABEL1","LABEL2","LABEL3","LABEL4","LABEL5","LABEL6","LABEL7"]].values.tolist()
train_df = pd.DataFrame(train_data, columns=['text','labels'])
6jygbczu

6jygbczu9#

我只是这样做的(python3.9):

import pandas as pd
my_dict=dict(x=x, y=y, z=z) # Set column ordering here
my_df=pd.DataFrame.from_dict(my_dict)

这似乎相当简单(尽管是在2022年),除非我遗漏了一些明显的东西……
在python2中,可以使用collections.OrderedDict()

相关问题