Как сформировать список списков Python

Час добрый
Подскажите пожалуйста как можно создать список списков в Python для следующего набора списков:

name = ['John']
sname = ['Black']
money = ['10', '20', '15']
car = ['red', 'blue', 'white']
car_num = ['221', '152', '612154'] 

Чтобы получить таблицу вида:

--------------------------------------
name | sname | money| car  | car_num |
-------------------------------------
John | Black | 10   | red  | 221     |
     |       | 20   | blue | 152     |
     |       | 15   | white| 612154  |
--------------------------------------

Т.е. чтобы появился список с этими данными, который можно записать в csv файл при помощи команды пандаса:

df = pd.DataFrame(data, columns=["name","sname","money","car","car_num"])

В списке name и sname всегда будет по 1 элементу, который будет состоять из нескольких слов. К примеру за место John будет записано

 name = ['John from NewYork'] 

В списках money, car, car_num всегда будет равное количество элементов, до 40 шт. (в примере всего лишь 3 накидал)
Так же подскажите пожалуйста как потом сие чудо сохранить в csv, чтобы по итогу появилась таблица из примера


Ответы (1 шт):

Автор решения: CrazyElf

Если я правильно понял, что вы хотите:

  • находим максимальную длину списков
  • добиваем пустыми строками до нужной длины те списки, которые могут быть недостаточно длинными (иначе Pandas будет ругаться, что это неправильная таблица)

Хотя не очень понятно, зачем вам один элемент на весь столбец таблицы. Разве что для красоты.

import pandas as pd

name = ['John from NewYork']
sname = ['Black']
money = ['10', '20', '15']
car = ['red', 'blue', 'white']
car_num = ['221', '152', '612154']

max_len = max(map(len, [name, sname, money, car, car_num]))
pad_list = lambda x,n: x + [''] * (n - len(x))

df = pd.DataFrame({
    'name': pad_list(name, max_len),
    'sname': pad_list(sname, max_len),
    'money': money,
    'car': car,
    'car_num': car_num, 
})

df

Вывод:

                 name   sname   money     car   car_num
0   John from NewYork   Black      10     red       221
1                                  20    blue       152
2                                  15   white    612154
→ Ссылка