Возьмите несколько списков в фрейм данных


Как мне взять несколько списков и поместить их в качестве разных столбцов в фрейм данных python? Я попытался следовать спискам чтения в столбцы фрейма данных pandas, но у меня были некоторые проблемы.

Попытка 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 столбца (три списка) pandas dataframe?

4 82

4 ответа:

Я думаю, что ты почти там, попробуйте удалить лишние квадратные скобки lst ' s (Также вам не нужно указывать имена столбцов при создании фрейма данных из dict, как это):

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 как и в вашей первой попытке, это имеет около 2x ускорение на примере здесь, однако приходит на немного стоимости читаемости на мой взгляд:

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

добавлять к Гуру Адитьяответ здесь. Нет необходимости использовать карту. Вы можете сделать это просто:

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

это установит имена столбцов как 0,1,2. Чтобы задать собственные имена столбцов, можно передать ключевое слово argument columns на способ выше.

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

просто добавляя, что с помощью первого подхода это можно сделать как -

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

добавление еще одного масштабируемого решения.

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