Просто превратите ваш data_list
в выражение генератора. Например:
from collections import namedtuple
MyData = namedtuple("MyData", ["a"])
data = (d.a for d in (MyData(i) for i in range(100)))
df = pd.DataFrame(data)
будет работать просто отлично. Итак, что вы должны сделать, это иметь:
data = ((record.Timestamp,record.Value, record.Name, record.desc) for record in records)
df = pd.DataFrame(data, columns=["Timestamp", "Value", "Name", "Desc"])
Реальная причина, по которой ваш подход не работает, состоит в том, что у вас есть одна запись в вашем data_list
, которая является генератором над - я предполагаю - 142538 записями. Pandas попытается втиснуть эту единственную запись в вашем data_list
в одну строку (таким образом, все записи 142538, каждая из которых содержит список из четырех элементов) и завершится неудачей, поскольку ожидает, что будет передано скорее 4 столбца.
Редактировать: вы, конечно, можете сделать выражение генератора более сложным, вот пример в соответствии с вашими дополнительными событиями l oop over:
from collections import namedtuple
MyData = namedtuple("MyData", ["a", "b"])
data = ((d.a, d.b) for j in range(100) for d in (MyData(j, j+i) for i in range(100)))
pd.DataFrame(data, columns=["a", "b"])
edit: вот также пример с использованием таких структур данных, как Вы используете:
Record = namedtuple("Record", ["Timestamp", "Value", "Name", "desc"])
event_list = [[Record(Timestamp=1, Value=1, Name=1, desc=1),
Record(Timestamp=2, Value=2, Name=2, desc=2)],
[Record(Timestamp=3, Value=3, Name=3, desc=3)]]
data = ((r.Timestamp, r.Value, r.Name, r.desc) for events in event_list for r in events)
pd.DataFrame(data, columns=["timestamp", "value", "name", "desc"])
Вывод:
timestamp value name desc
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3