Marco de datos de Pandas: divide la columna en varias columnas, alinea a la derecha las entradas de celda inconsistentes

Tengo un dataframe de pandas con una columna llamada ‘Ciudad, Estado, País’. Quiero separar esta columna en tres nuevas columnas, ‘Ciudad,’ Estado ‘y’ País ‘.

0 HUN 1 ESP 2 GBR 3 ESP 4 FRA 5 ID, USA 6 GA, USA 7 Hoboken, NJ, USA 8 NJ, USA 9 AUS 

Dividir la columna en tres columnas es suficientemente trivial:

 location_df = df['City, State, Country'].apply(lambda x: pd.Series(x.split(','))) 

Sin embargo, esto crea datos alineados a la izquierda:

  0 1 2 0 HUN NaN NaN 1 ESP NaN NaN 2 GBR NaN NaN 3 ESP NaN NaN 4 FRA NaN NaN 5 ID USA NaN 6 GA USA NaN 7 Hoboken NJ USA 8 NJ USA NaN 9 AUS NaN NaN 

¿Cómo se podría hacer para crear las nuevas columnas con los datos alineados a la derecha? ¿Necesitaría recorrer cada fila, contar el número de comas y manejar los contenidos individualmente?

Haría algo como lo siguiente:

 foo = lambda x: pd.Series([i for i in reversed(x.split(','))]) rev = df['City, State, Country'].apply(foo) print rev 0 1 2 0 HUN NaN NaN 1 ESP NaN NaN 2 GBR NaN NaN 3 ESP NaN NaN 4 FRA NaN NaN 5 USA ID NaN 6 USA GA NaN 7 USA NJ Hoboken 8 USA NJ NaN 9 AUS NaN NaN 

Creo que eso le da a usted lo que quiere, pero si también quiere arreglar las cosas y obtener un orden de columna Ciudad, Estado, País, puede agregar lo siguiente:

 rev.rename(columns={0:'Country',1:'State',2:'City'},inplace=True) rev = rev[['City','State','Country']] print rev City State Country 0 NaN NaN HUN 1 NaN NaN ESP 2 NaN NaN GBR 3 NaN NaN ESP 4 NaN NaN FRA 5 NaN ID USA 6 NaN GA USA 7 Hoboken NJ USA 8 NaN NJ USA 9 NaN NaN AUS 

Como está tratando con cadenas, sugeriría la modificación de su código actual, es decir,

 location_df = df[['City, State, Country']].apply(lambda x: pd.Series(str(x).split(','))) 

Conseguí el mío para trabajar probando una de las columnas, pero probé esta.