Comment prendre plusieurs listes et les mettre en tant que colonnes différentes dans un dataframe python? J'ai essayé cette solution mais j'ai eu quelques problèmes.
Tentative 1:
res = Zip(lst1,lst2,lst3)
Tentative 2:
percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
'lst2Tite' : [lst2],
'lst3Tite' : [lst3] },
columns=['lst1Tite','lst1Tite', 'lst1Tite'])
Comment puis-je obtenir 100 lignes (longueur de chaque liste indépendante) par 3 colonnes (trois listes) pandas dataframe?
Essayez de supprimer les crochets supplémentaires autour des lst
(vous n'avez pas non plus besoin de spécifier les noms des colonnes lorsque vous créez un cadre de données à partir d'un dict comme celui-ci):
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
...
Si vous avez besoin d’une solution plus performante, vous pouvez utiliser np.column_stack
plutôt que Zip
, car lors de votre première tentative, cet exemple a une vitesse environ deux fois plus rapide que l’exemple présenté ici, mais a un coût légèrement plus élevé en lecture opinion:
import numpy as np
percentile_list = pd.DataFrame(np.column_stack([lst1, lst2, lst3]),
columns=['lst1Title', 'lst2Title', 'lst3Title'])
Ajout à la réponse de Aditya Gur ici. Il n'est pas nécessaire d'utiliser la carte. Vous pouvez le faire simplement en:
pd.DataFrame(list(Zip(lst1, lst2, lst3)))
Cela définira les noms de colonne comme 0,1,2. Pour définir vos propres noms de colonne, vous pouvez passer le mot-clé argument columns
à la méthode ci-dessus.
pd.DataFrame(list(Zip(lst1, lst2, lst3)),
columns=['lst1_title','lst2_title', 'lst3_title'])
J'ajoute simplement qu'en utilisant la première approche, cela peut être fait comme -
pd.DataFrame(list(map(list, Zip(lst1,lst2,lst3))))
Ajout d'une solution évolutive supplémentaire.
lists = [lst1, lst2, lst3, lst4]
df = pd.concat([pd.Series(x) for x in lists], axis=1)
En ajoutant aux réponses ci-dessus, nous pouvons créer à la volée
df= pd.DataFrame()
list1 = list(range(10))
list2 = list(range(10,20))
df['list1'] = list1
df['list2'] = list2
print(df)
j'espère que ça aide !
@oopsi utilisait pd.concat()
mais n'incluait pas les noms de colonnes. Vous pouvez effectuer les opérations suivantes, qui, contrairement à la première solution de la réponse acceptée, vous permettent de contrôler l’ordre des colonnes (évite les repères, qui ne sont pas ordonnés):
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,s3,s3], axis=1)
percentile_list
Out[32]:
lst1Title lst3Title 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
...