Birden çok listeyi veri çerçevesine alın


164

Birden çok listeyi nasıl alabilirim ve bunları bir python veri çerçevesine farklı sütunlar olarak nasıl koyabilirim? Bu çözümü denedim ama biraz sorun yaşadım .

Deneme 1:

  • Üç listeniz olsun ve bunları bir araya getirip kullanın res = zip(lst1,lst2,lst3)
  • Yalnızca bir sütun verir

Deneme 2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
                                'lst2Tite' : [lst2],
                                'lst3Tite' : [lst3] }, 
                                columns=['lst1Tite','lst1Tite', 'lst1Tite'])
  • ya bir satır 3 sütun (yukarıdaki şekilde) verir ya da ben aktarırsam 3 satır ve 1 sütundur

100 satır (her bağımsız listenin uzunluğu) 3 sütun (üç liste) panda veri çerçevesine nasıl ulaşabilirim?

Yanıtlar:


279

Ben neredeyse orada olduğunu düşünüyorum, lst's etrafında ekstra köşeli parantez kaldırmayı deneyin (Ayrıca böyle bir dikte bir veri çerçevesi oluştururken sütun adlarını belirtmeniz gerekmez):

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

İlk denemenizden np.column_stackziyade kullanabileceğiniz daha performanslı bir çözüme ihtiyacınız varsa zip, buradaki örnekte yaklaşık 2x'lik bir hızlanma var, ancak bence biraz okunabilirlik maliyeti var:

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

Np.column_stack bir görünüm mü yoksa verileri kopyalıyor mu? (Kopyalanıyorsa, bunun çok daha verimli olabileceği görülüyor (O (n) değil, O (n)).
user48956

@maxymoo sütun adları otomatik olarak liste adına ayarlanabilir mi?
joe5

1
Listeler farklı veri türlerine sahipse numpy sütun yığını iyi çalışmıyor
user6386155

54

Aditya Guru'nun cevabını buraya ekliyoruz . Harita kullanmaya gerek yoktur. Bunu basitçe şu şekilde yapabilirsiniz:

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

Bu sütun adlarını 0,1,2 olarak ayarlar. Kendi sütun adlarınızı ayarlamak için, anahtar kelime bağımsız değişkenini columnsyukarıdaki yönteme iletebilirsiniz .

pd.DataFrame(list(zip(lst1, lst2, lst3)),
              columns=['lst1_title','lst2_title', 'lst3_title'])

3
Python 3.8 ve Pandalar 1.0'da, DataFrame yinelemeyi beklediğinden ve zip () yinelenebilir bir nesne döndürdüğü için list işlevini kullanmamız gerekmez. Öyleyse pd.DataFrame(zip(lst1, lst2, lst3))de yapmalı.
Sarfraaz Ahmed

10

Sadece ilk yaklaşımı kullanarak -

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

8

Bir ölçeklenebilir çözüm daha ekleniyor.

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

bunu biraz açıklayabilir misin?
ZakS

1
Listelerden DataFrame oluşturmak için (concat) serisine dikey olarak katıldınız (axis = 1)
yona bendelac

5

Yukarıdaki cevaplara ek olarak, anında oluşturabiliriz

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

Umarım yardımcı olur !


1

@oopsi kullanıldı, pd.concat()ancak sütun adlarını içermedi. Kabul edilen yanıttaki ilk çözümün aksine, sütun sırası üzerinde kontrol sağlayan (sırasız olan dikmeleri önleyen) aşağıdakileri yapabilirsiniz:

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

1

Birden çok listeden veri çerçevesi oluşturmanın birkaç yolu vardır.

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

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


0

aşağıdaki kodu basitçe kullanabilirsiniz

train_data['labels']= train_data[["LABEL1","LABEL1","LABEL2","LABEL3","LABEL4","LABEL5","LABEL6","LABEL7"]].values.tolist()
train_df = pd.DataFrame(train_data, columns=['text','labels'])
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.