#python #pandas #database
Вопрос:
У меня есть следующая проблема. Моя база данных возвращает список:
[Order(id=22617, frm=datetime.datetime(2020, 6, 1, 8, 0), to=datetime.datetime(2020, 6, 1, 10, 0), loc=Location(lat=14.491272455461, lng=50.130463596998), address='Makedonska 619/11, Praha', duration=600), datetime.datetime(2020, 6, 1, 11, 38, 46), Order(id=22615, frm=datetime.datetime(2020, 6, 1, 8, 0), to=datetime.datetime(2020, 6, 1, 14, 0), loc=Location(lat=14.681866313487, lng=50.007439571346), address='Výhledová 256, Říčany', duration=600), datetime.datetime(2020, 6, 1, 10, 33, 33)]
Каждый вывод из базы данных является типом routes_data_loading.data_structures.Order
и datetime.datetime
. Я хотел бы сохранить его как фрейм данных pandas.
Желаемый результат для первой строки:
id;frm;to;lat;lng;address;duration;time
22617;2020-06-01 08:00;2020-06-01 10:00;14.491272455461;50.130463596998;Makedonska 619/11, Praha;600;2020-06-01 11:38:46
Точка с запятой обозначает новый столбец. Обратите внимание, что необходимо создать последний столбец time
, поскольку его имени нет в исходном списке.
Не могли бы вы помочь мне, как преобразовать этот список в pandas df, пожалуйста? Я знаю, как преобразовать простой список в df, но не этот сложный. Большое спасибо.
Комментарии:
1. Попробуйте, если
lst[0].__dict__
что-то верните.2. Это помогло, спасибо!
Ответ №1:
Попробуйте это без гарантии успеха:
data = []
for order, time in zip(lst[::2], lst[1::2]):
data.append({'id': order.id, 'frm': order.frm, 'to': order.to,
'lat': order.loc.lat, 'lng': order.loc.lng,
'address': order.address, 'duration': order.duration,
'time': time})
df = pd.DataFrame(data)
Выход:
>>> df
id frm to lat lng address duration time
0 22617 2020-06-01 08:00:00 2020-06-01 10:00:00 14.491272 50.130464 Makedonska 619/11, Praha 600 2020-06-01 11:38:46
1 22615 2020-06-01 08:00:00 2020-06-01 14:00:00 14.681866 50.007440 Výhledová 256, Říčany 600 2020-06-01 10:33:33
Как мне настроить:
from collections import namedtuple
import datetime
Order = namedtuple('Order', ['id', 'frm', 'to', 'loc', 'address', 'duration'])
Location = namedtuple('Location', ['lat', 'lng'])
lst = [Order(id=22617, frm=datetime.datetime(2020, 6, 1, 8, 0), to=datetime.datetime(2020, 6, 1, 10, 0), loc=Location(lat=14.491272455461, lng=50.130463596998), address='Makedonska 619/11, Praha', duration=600),
datetime.datetime(2020, 6, 1, 11, 38, 46),
Order(id=22615, frm=datetime.datetime(2020, 6, 1, 8, 0), to=datetime.datetime(2020, 6, 1, 14, 0), loc=Location(lat=14.681866313487, lng=50.007439571346), address='Výhledová 256, Říčany', duration=600),
datetime.datetime(2020, 6, 1, 10, 33, 33)]
Комментарии:
1. работает отлично, спасибо!
2. Вау. Рад это прочесть. Я не был уверен в своем ответе 🙂 Спасибо за вашу поддержку!