str column python pandas

python - str - pandas split column



pandas+dataframe-seleccionar por cadena parcial (8)

Tengo un DataFrame con 4 columnas de las cuales 2 contienen valores de cadena. Me preguntaba si habría una manera de seleccionar filas basadas en una cadena de concordancia parcial con una columna en particular.

En otras palabras, una función o función lambda que haría algo como

re.search(pattern, cell_in_question)

devolviendo un booleano. Estoy familiarizado con la sintaxis de df[df[''A''] == "hello world"] pero parece que no puedo encontrar la manera de hacer lo mismo con una cadena de caracteres parcial que diga ''hello'' .

¿Alguien podría apuntarme en la dirección correcta?


¿Cómo filtraría la "libertad" excepto con más criterios como "legado", "úlico", etc.?

df_Fixed[~df_Fixed["Busler Group"].map(lambda x: x.startswith(''Liberty''))]


Digamos que tienes el siguiente DataFrame :

>>> df = pd.DataFrame([[''hello'', ''hello world''], [''abcd'', ''defg'']], columns=[''a'',''b'']) >>> df a b 0 hello hello world 1 abcd defg

Siempre puede usar el operador in en una expresión lambda para crear su filtro.

>>> df.apply(lambda x: x[''a''] in x[''b''], axis=1) 0 True 1 False dtype: bool

El truco aquí es usar la opción axis=1 en la apply para pasar elementos a la función lambda fila por fila, en lugar de columna por columna.


Esto es lo que terminé haciendo para coincidencias de cadenas parciales. Si alguien tiene una forma más eficiente de hacerlo, hágamelo saber.

def stringSearchColumn_DataFrame(df, colName, regex): newdf = DataFrame() for idx, record in df[colName].iteritems(): if re.search(regex, record): newdf = concat([df[df[colName] == record], newdf], ignore_index=True) return newdf


Estoy usando pandas 0.14.1 en macos en el portátil ipython. Probé la línea propuesta arriba:

df[df[''A''].str.contains("Hello|Britain")]

y obtuve un error:

"cannot index with vector containing NA / NaN values"

pero funcionó perfectamente cuando se agregó una condición "== True", como esta:

df[df[''A''].str.contains("Hello|Britain")==True]


Nota rápida: si desea realizar una selección basada en una cadena parcial contenida en el índice, intente lo siguiente:

df[''stridx'']=df.index df[df[''stridx''].str.contains("Hello|Britain")]



Si alguien se pregunta cómo realizar un problema relacionado: "Seleccionar columna por cadena parcial"

Utilizar:

df.filter(like=''hello'') # select columns which contain the word hello

Y para seleccionar filas por coincidencia parcial de cadena, pase el axis=0 para filtrar

# selects rows which contain the word hello in their index label df.filter(like=''hello'', axis=0)


import pandas as pd k=pd.DataFrame([''hello'',''doubt'',''hero'',''help'']) k.columns=[''some_thing''] t=k[k[''some_thing''].str.contains("hel")] d=k.replace(t,''CS'')

:::SALIDA:::

k Out[95]: some_thing 0 hello 1 doubt 2 hero 3 help t Out[99]: some_thing 0 hello 3 help d Out[96]: some_thing 0 CS 1 doubt 2 hero 3 CS