将多个列表放入数据框中
- 2025-03-18 08:56:00
- admin 原创
- 58
问题描述:
如何获取多个列表并将它们作为不同的列放在 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 列(三个列表)的 pandas 数据框?
解决方案 1:
我认为您已经快完成了,请尝试删除 's 周围的多余方括号lst
(此外,当您从这样的字典创建数据框时,您不需要指定列名):
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'])
解决方案 2:
在此补充一下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'])
解决方案 3:
添加另一个可扩展的解决方案。
lists = [lst1, lst2, lst3, lst4]
df = pd.concat([pd.Series(x) for x in lists], axis=1)
解决方案 4:
有多种方法可以从多个列表创建数据框。
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,list2,list3),columns=['list1','list2','list3'])
解决方案 5:
只需补充一点,使用第一种方法就可以做到这一点 -
pd.DataFrame(list(map(list, zip(lst1,lst2,lst3))))
解决方案 6:
除了上述答案之外,我们还可以即时创建
df= pd.DataFrame()
list1 = list(range(10))
list2 = list(range(10,20))
df['list1'] = list1
df['list2'] = list2
print(df)
希望它有帮助!
解决方案 7:
@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
...
解决方案 8:
您可以简单地使用以下代码
train_data['labels']= train_data[["LABEL1","LABEL1","LABEL2","LABEL3","LABEL4","LABEL5","LABEL6","LABEL7"]].values.tolist()
train_df = pd.DataFrame(train_data, columns=['text','labels'])
解决方案 9:
我只是这样做了(python 3.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 年),除非我遗漏了一些明显的东西……
在 Python 2 中,可以使用collections.OrderedDict()
。
扫码咨询,免费领取项目管理大礼包!