如何将数据库返回的含Order和datetime对象的列表转为pandas DataFrame
实现代码
核心逻辑:你拿到的列表是Order对象和对应的时间戳交替排列的结构,我们可以按步长2遍历列表,成对提取Order属性和对应时间,再构造DataFrame。
import pandas as pd import datetime # 导入你自己的数据结构类,根据实际import路径调整 from routes_data_loading.data_structures import Order, Location # 你的原始数据库返回列表 raw_data = [ 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) ] # 构造行数据列表 rows = [] for idx in range(0, len(raw_data), 2): order = raw_data[idx] time_val = raw_data[idx+1] # 校验类型避免数据错位 if isinstance(order, Order) and isinstance(time_val, datetime.datetime): rows.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_val }) # 生成DataFrame df = pd.DataFrame(rows) # 如果需要导出为分号分隔的csv,执行下面的代码 # df.to_csv("output.csv", sep=";", index=False, encoding="utf-8-sig")
结果验证
生成的df结构和要求完全一致,输出内容如下:
| id | frm | to | lat | lng | address | duration | time |
|---|---|---|---|---|---|---|---|
| 22617 | 2020-06-01 08:00:00 | 2020-06-01 10:00:00 | 14.491272455461 | 50.130463596998 | Makedonska 619/11, Praha | 600 | 2020-06-01 11:38:46 |
| 22615 | 2020-06-01 08:00:00 | 2020-06-01 14:00:00 | 14.681866313487 | 50.007439571346 | Výhledová 256, Říčany | 600 | 2020-06-01 10:33:33 |
内容的提问来源于stack exchange,提问作者vojta
相关产品推荐
相关产品推荐

