La forma más rápida de convertir la lista de tuplas a una serie.

Considere una lista de tuplas lst

 lst = [('a', 10), ('b', 20)] 

pregunta
¿Cuál es la forma más rápida de convertir esto a la serie?

 i a 10 b 20 Name: c, dtype: int64 

bashs

 pd.DataFrame(lst, list('ic')).set_index('i').c 

Esto es ineficiente.

Dos posibles inconvenientes @Divakar's np.asarray(lst) @Divakar's np.asarray(lst) : convierte todo en cadena, lo que requiere que Pandas los vuelva a convertir. Y los arreglos de velocidad son relativamente caros.

Una alternativa es usar el lenguaje zip(*) para “transponer” la lista:

 In [65]: lst = [('a', 10), ('b', 20), ('j',1000)] In [66]: zlst = list(zip(*lst)) In [67]: zlst Out[67]: [('a', 'b', 'j'), (10, 20, 1000)] In [68]: out = pd.Series(zlst[1], index = zlst[0]) In [69]: out Out[69]: a 10 b 20 j 1000 dtype: int32 

Tenga en cuenta que mi dtype es int, no objeto.

 In [79]: out.values Out[79]: array(['10', '20', '1000'], dtype=object) 

Entonces, en el caso de la matriz, Pandas no convierte los valores de nuevo a entero; los deja como cuerdas.

==============

Mi conjetura acerca de los tiempos está desactivada: no tengo idea de los tiempos de creación de la serie pandas. También la muestra es demasiado pequeña para hacer tiempos significativos:

 In [71]: %%timeit ...: out=pd.Series(dict(lst)) 1000 loops, best of 3: 305 µs per loop In [72]: %%timeit ...: arr=np.array(lst) ...: out = pd.Series(arr[:,1], index=arr[:,0]) 10000 loops, best of 3: 198 µs per loop In [73]: %%timeit ...: zlst = list(zip(*lst)) ...: out = pd.Series(zlst[1], index=zlst[0]) ...: 1000 loops, best of 3: 275 µs per loop 

O forzando la interpretación entera.

 In [85]: %%timeit ...: arr=np.array(lst) ...: out = pd.Series(arr[:,1], index=arr[:,0], dtype=int) ...: ...: 1000 loops, best of 3: 253 µs per loop 

La forma más sencilla es pasar su lista de tuplas como un diccionario:

 >>> pd.Series(dict(lst)) a 10 b 20 dtype: int64 

Un enfoque con NumPy asumiendo una lista de longitudes regulares –

 arr = np.asarray(lst) out = pd.Series(arr[:,1], index = arr[:,0]) 

Ejecución de la muestra

 In [147]: lst = [('a', 10), ('b', 20), ('j',1000)] In [148]: arr = np.asarray(lst) In [149]: pd.Series(arr[:,1], index = arr[:,0]) Out[149]: a 10 b 20 j 1000 dtype: object 

Usar pd.Series con un diccionario de comprensión.

 pd.Series({k: v for k, v in lst}) a 10 b 20 dtype: int64