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.