Ambil beberapa daftar ke dalam bingkai data


164

Bagaimana cara saya mengambil beberapa daftar dan meletakkannya sebagai kolom yang berbeda dalam kerangka data python? Saya mencoba solusi ini tetapi mengalami beberapa masalah.

Percobaan 1:

  • Memiliki tiga daftar, dan kumpulkan bersama dan gunakan itu res = zip(lst1,lst2,lst3)
  • Menghasilkan hanya satu kolom

Percobaan 2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
                                'lst2Tite' : [lst2],
                                'lst3Tite' : [lst3] }, 
                                columns=['lst1Tite','lst1Tite', 'lst1Tite'])
  • menghasilkan satu baris dengan 3 kolom (cara di atas) atau jika saya transpos, 3 baris dan 1 kolom

Bagaimana cara mendapatkan 100 baris (panjang dari setiap daftar independen) dengan 3 kolom (tiga daftar) bingkai data panda?

Jawaban:


279

Saya pikir Anda hampir sampai, coba hapus tanda kurung siku di sekitar tanda kurung lst(Juga Anda tidak perlu menentukan nama kolom saat Anda membuat kerangka data dari dict seperti ini):

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

Jika Anda membutuhkan solusi yang lebih berkinerja yang dapat Anda gunakan np.column_stackdaripada zipdalam upaya pertama Anda, ini memiliki sekitar 2x percepatan pada contoh di sini, namun datang pada sedikit biaya keterbacaan menurut pendapat saya:

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

Apakah np.column_stack tampilan, atau apakah itu menyalin data. (Jika disalin, sepertinya ini bisa menjadi jauh lebih efisien (O (1), bukan O (n))
user48956

@maxymoo dapatkah nama kolom disetel secara otomatis ke nama daftar?
joe5

1
tumpukan kolom numpy tidak berfungsi dengan baik jika daftar datatypes berbeda
user6386155

54

Menambah jawaban Aditya Guru di sini. Tidak perlu menggunakan peta. Anda dapat melakukannya hanya dengan:

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

Ini akan menetapkan nama kolom sebagai 0,1,2. Untuk menetapkan nama kolom Anda sendiri, Anda dapat meneruskan argumen kata kunci columnske metode di atas.

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

3
Dalam Python 3.8, dan Pandas 1.0, kita tidak perlu menggunakan fungsi daftar, karena DataFrame mengharapkan iterable, dan zip () mengembalikan objek iterable. Jadi, pd.DataFrame(zip(lst1, lst2, lst3))juga harus dilakukan.
Sarfraaz Ahmed

10

Hanya menambahkan bahwa menggunakan pendekatan pertama itu bisa dilakukan sebagai -

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

8

Menambahkan satu lagi solusi yang dapat diskalakan.

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

dapatkah kamu menjelaskan yang ini sedikit?
ZakS

1
Anda bergabung dengan (concat) seri secara vertikal (axis = 1) untuk membuat DataFrame dari daftar daftar
yona bendelac

5

Menambahkan ke jawaban di atas, kita dapat membuat dengan cepat

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

semoga membantu!


1

@opsi digunakan pd.concat()tetapi tidak menyertakan nama kolom. Anda bisa melakukan yang berikut ini, yang, tidak seperti solusi pertama dalam jawaban yang diterima, memberi Anda kendali atas urutan kolom (menghindari dikte, yang tidak berurutan):

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

Ada beberapa cara untuk membuat kerangka data dari banyak daftar.

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

Anda dapat dengan mudah menggunakan kode berikut ini

train_data['labels']= train_data[["LABEL1","LABEL1","LABEL2","LABEL3","LABEL4","LABEL5","LABEL6","LABEL7"]].values.tolist()
train_df = pd.DataFrame(train_data, columns=['text','labels'])
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.