Візьміть декілька списків у кадр даних


164

Як я можу взяти декілька списків і розмістити їх як різні стовпці у фреймі даних 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 стовпці (три списки) панд даних фрейму?

Відповіді:


279

Я думаю, що ви майже там, спробуйте видалити зайві квадратні дужки навколо lst's (Також вам не потрібно вказувати назви стовпців, коли ви створюєте фрейм даних із цього диктату):

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'])

Чи є np.column_stack перегляд, чи він копіює дані. (Якщо скопіювати, то здається, що це може бути набагато ефективнішим (O (1), а не O (n)).
user48956

@maxymoo чи можуть імена стовпців автоматично встановлюватися на ім’я списку?
joe5

1
numpy стек стовпців не працює добре, якщо списки мають різні типи даних
user6386155

54

Додайте тут відповідь Гурі Адітії . Немає необхідності використовувати карту. Зробити це можна просто:

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
У Python 3.8 та Pandas 1.0 нам не потрібно використовувати список функцій, оскільки DataFrame очікує ітерабельний, а zip () повертає ітерабельний об'єкт. Отже, pd.DataFrame(zip(lst1, lst2, lst3))також слід робити.
Сарфрааз Ахмед

10

Просто додавши, що за допомогою першого підходу це можна зробити як -

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

8

Додавання ще одного масштабованого рішення.

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

ви можете трохи пояснити це?
ZakS

1
Ви приєднуєтесь до (concat) серії вертикально (вісь = 1), щоб створити DataFrame зі списку списків
yona bendelac

5

Додавши до вищезазначених відповідей, ми можемо творити на льоту

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

сподіваюся, що це допоможе!


1

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

1

Існує кілька способів створення фрейму даних з декількох списків.

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

ви можете просто скористатися цим наступним кодом

train_data['labels']= train_data[["LABEL1","LABEL1","LABEL2","LABEL3","LABEL4","LABEL5","LABEL6","LABEL7"]].values.tolist()
train_df = pd.DataFrame(train_data, columns=['text','labels'])
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.