data = [[random.random() for i in range(1, 4)] for j in range(1, 8)]
df = pd.DataFrame(data)
lista = [df.columns[:,].values.astype(str).tolist()] + df.values.tolist()
ts = [('ALIGN', (1, 1), (-1, -1), 'CENTER'), ('LINEABOVE', (0, 0), (-1, 0),
    1, colors.purple), ('LINEBELOW', (0, 0), (-1, 0), 1, colors.purple), (
    'FONT', (0, 0), (-1, 0), 'Times-Bold'), ('LINEABOVE', (0, -1), (-1, -1),
    1, colors.purple), ('LINEBELOW', (0, -1), (-1, -1), 0.5, colors.purple,
    1, None, None, 4, 1), ('LINEBELOW', (0, -1), (-1, -1), 1, colors.red),
    ('FONT', (0, -1), (-1, -1), 'Times-Bold'), ('BACKGROUND', (1, 1), (-2, 
    -2), colors.green), ('TEXTCOLOR', (0, 0), (1, -1), colors.red)]
table = Table(lista, style=ts)
elements.append(table)
doc.build(elements)
Pandas DataFrames в reportlab