Forma de Pythonic para calcular la longitud de las listas en la columna de dataframe de pandas

Tengo un dataframe como este:

CreationDate 2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux] 2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2] 2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik] 

Estoy calculando la longitud de las listas en la columna CreationDate y haciendo una nueva columna de Length como esta:

 df['Length'] = df.CreationDate.apply(lambda x: len(x)) 

Lo que me da esto:

  CreationDate Length 2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux] 3 2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2] 4 2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik] 4 

¿Hay alguna forma más pythonica de hacer esto?

También puede utilizar el acceso str para algunas operaciones de lista. En este ejemplo,

 df['CreationDate'].str.len() 

devuelve la longitud de cada lista. Ver los documentos para str.len .

 df['Length'] = df['CreationDate'].str.len() df Out: CreationDate Length 2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux] 3 2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2] 4 2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik] 4 

Para estas operaciones, la vainilla Python es generalmente más rápida. pandas maneja NaNs sin embargo. Aquí están los tiempos:

 ser = pd.Series([random.sample(string.ascii_letters, random.randint(1, 20)) for _ in range(10**6)]) %timeit ser.apply(lambda x: len(x)) 1 loop, best of 3: 425 ms per loop %timeit ser.str.len() 1 loop, best of 3: 248 ms per loop %timeit [len(x) for x in ser] 10 loops, best of 3: 84 ms per loop %timeit pd.Series([len(x) for x in ser], index=ser.index) 1 loop, best of 3: 236 ms per loop