Columna del diccionario en dataframe pandas

Tengo un CSV que estoy leyendo en un dataframe de pandas. Sin embargo, una de las columnas tiene la forma de un diccionario. Aquí hay un ejemplo:

ColA, ColB, ColC, ColdD 20, 30, {"ab":"1", "we":"2", "as":"3"},"String" 

¿Cómo puedo convertir esto en un dataframe que se parece a esto:

 ColA, ColB, AB, WE, AS, ColdD 20, 30, "1", "2", "3", "String" 

edit He solucionado la pregunta, se ve así, pero es una cadena que necesita ser analizada, no un objeto dict.

Así que comenzando con su una fila df

  Col A Col B Col C Col D 0 20 30 {u'we': 2, u'ab': 1, u'as': 3} String1 

EDIT: basado en el comentario del OP, asumo que primero debemos convertir la cadena

 import ast df["ColC"] = df["ColC"].map(lambda d : ast.literal_eval(d)) 

luego convertimos Col C en un dict, lo transponemos y luego lo unimos al df original

 dfNew = df.join(pd.DataFrame(df["Col C"].to_dict()).T) dfNew 

lo que te da esto

  Col A Col B Col C Col D ab as we 0 20 30 {u'we': 2, u'ab': 1, u'as': 3} String1 1 3 2 

Luego simplemente seleccionamos las columnas que queremos en dfNew

 dfNew[["Col A", "Col B", "ab", "we", "as", "Col D"]] Col A Col B ab we as Col D 0 20 30 1 2 3 String1 

Según https://stackoverflow.com/a/38231651/454773 , puede usar .apply(pd.Series) para asignar la columna que contiene el dict sobre nuevas columnas y luego concatenar estas nuevas columnas de nuevo en el dataframe original menos el dict original columna que contiene:

 dw=pd.DataFrame( [[20, 30, {"ab":"1", "we":"2", "as":"3"},"String"]], columns=['ColA', 'ColB', 'ColC', 'ColdD']) pd.concat([dw.drop(['ColC'], axis=1), dw['ColC'].apply(pd.Series)], axis=1) 

Devoluciones:

 ColA ColB ColdD ab as we 20 30 String 1 3 2 

¿Qué pasa con algo como:

 import pandas as pd # Create mock dataframe df = pd.DataFrame([ [20, 30, {'ab':1, 'we':2, 'as':3}, 'String1'], [21, 31, {'ab':4, 'we':5, 'as':6}, 'String2'], [22, 32, {'ab':7, 'we':8, 'as':9}, 'String2'], ], columns=['Col A', 'Col B', 'Col C', 'Col D']) # Create dataframe where you'll store the dictionary values ddf = pd.DataFrame(columns=['AB','WE','AS']) # Populate ddf dataframe for (i,r) in df.iterrows(): e = r['Col C'] ddf.loc[i] = [e['ab'], e['we'], e['as']] # Replace df with the output of concat(df, ddf) df = pd.concat([df, ddf], axis=1) # New column order, also drops old Col C column df = df[['Col A', 'Col B', 'AB', 'WE', 'AS', 'Col D']] print(df) 

Salida:

    Col A Col B AB NOSOTROS COMO Col D
 0 20 30 1 2 3 Cuerda1
 1 21 31 4 5 6 cuerdas2
 2 22 32 7 8 9 Cuerda2