Las pandas eliminan toda una cadena en una columna después de un personaje

Así que tengo un conjunto de datos con más de 500 filas donde una de las columnas tiene valores como este:

df:

column1 0 a{'...'} 1 b{'...'} 2 c{'...'} 3 d{'...'} 

Quiero eliminar todo lo que está dentro e incluyendo el {} .

He estado analizando esta pregunta, Pandas borra partes de una cadena después de un carácter específico dentro de un dataframe y probé las soluciones allí, pero sigo recibiendo errores (y soy consciente de que StringIO ahora es io.StringIO ).

He intentado

 df.column1 = df.column1.str.split('{')[0] 

pero recibe el mensaje de error: KeyError: 0 y realmente no entiendo lo que eso significa

También he intentado:

 df.column1 = df.column1.str.split(pat='{') 

Pero esto solo parece borrar el ‘{‘ así que me quedo con

  column1 0 a'...'} 1 b'...'} 2 c'...'} 3 d'...'} 

Tampoco estoy seguro de si es importante, pero la columna es un tipo de object . ¿Alguien puede decirme qué estoy haciendo mal y cómo solucionar el problema?

Puedes usar replace

 df['column1'].str.replace(r"\{.*\}","") Out[385]: 0 a 1 b 2 c 3 d Name: column1, dtype: object 

También puede usar pandas.DataFrame.replace y pasar un diccionario que especifique qué hacer para varias columnas.

Usando el patrón regex de @ Wen

 df.replace(dict(column1={'\{.*\}': ''}), regex=True) column1 0 a 1 b 2 c 3 d 

En el espíritu de @pault, también puedes usar pandas.Series.str.extract

 df.column1.str.extract('([^\{]+)', expand=False) column1 0 a 1 b 2 c 3 d 

Un poco tarde (la solución de pandas.Series.str.split() es genial), pero puedes usar pandas.Series.str.split() como en tu bash original. Estabas cerca, solo necesitas establecer expand=True .

 df["column1"] = df["column1"].str.split("{", expand=True)[0] # column1 #0 a #1 b #2 c #3 d 

Usando .apply

 df = pd.DataFrame({"a":["a{'...'}", "b{'...'}"]}) df["a"] = df["a"].apply(lambda x: x.split('{')[0]) print df