Motivo
Muchos conjuntos de datos son lo suficientemente grandes como para preocuparnos por la velocidad/eficiencia. Entonces ofrezco esta solución en ese espíritu. Pasa a ser también sucinto.
Para efectos de comparación, dejemos la columna de la index
df = data_set.drop('index', 1)
Solución
voy a proponer el uso de zip
y una comprensión
list(zip(*[df[c].values.tolist() for c in df]))
[('2012-02-17', 24.75, 25.03),
('2012-02-16', 25.0, 25.07),
('2012-02-15', 24.99, 25.15),
('2012-02-14', 24.68, 25.05),
('2012-02-13', 24.62, 24.77),
('2012-02-10', 24.38, 24.61)]
Le pasa a ser también flexible si queremos tratar con un subconjunto específico de columnas. Asumiremos que las columnas que ya hemos mostrado son el subconjunto que queremos.
list(zip(*[df[c].values.tolist() for c in ['data_date', 'data_1', 'data_2']))
[('2012-02-17', 24.75, 25.03),
('2012-02-16', 25.0, 25.07),
('2012-02-15', 24.99, 25.15),
('2012-02-14', 24.68, 25.05),
('2012-02-13', 24.62, 24.77),
('2012-02-10', 24.38, 24.61)]
Todo el siguiente producir los mismos resultados
[tuple(x) for x in df.values]
df.to_records(index=False).tolist()
list(map(tuple,df.values))
list(map(tuple, df.itertuples(index=False)))
¿Qué es más rápido?
zip
y la comprensión es más rápido por un amplio margen
%timeit [tuple(x) for x in df.values]
%timeit list(map(tuple, df.itertuples(index=False)))
%timeit df.to_records(index=False).tolist()
%timeit list(map(tuple,df.values))
%timeit list(zip(*[df[c].values.tolist() for c in df]))
de datos pequeños
10000 loops, best of 3: 55.7 µs per loop
1000 loops, best of 3: 596 µs per loop
10000 loops, best of 3: 38.2 µs per loop
10000 loops, best of 3: 54.3 µs per loop
100000 loops, best of 3: 12.9 µs per loop
datos de gran tamaño
10 loops, best of 3: 58.8 ms per loop
10 loops, best of 3: 43.9 ms per loop
10 loops, best of 3: 29.3 ms per loop
10 loops, best of 3: 53.7 ms per loop
100 loops, best of 3: 6.09 ms per loop
Para quienes lleguen a esta respuesta en 2017+, hay una [nueva solución idiomática a continuación] (https://stackoverflow.com/a/34551914/3707607). Puedes simplemente usar 'list (df.itertuples (index = False, name = None))' –