python - replacing - replace values dataframe column pandas
Reemplazar algunos valores en una columna de marco de datos de pandas con otro valor (6)
Tengo un marco de datos de pandas df como se ilustra a continuación:
BrandName Specialty
A H
B I
ABC J
D K
AB L
Quiero reemplazar ''ABC'' y ''AB'' en la columna BrandName por A. ¿Alguien puede ayudarme con esto?
Reemplazar
DataFrame
objeto
DataFrame
tiene un método de
replace
potente y flexible:
DataFrame.replace(
to_replace=None,
value=None,
inplace=False,
limit=None,
regex=False,
method=''pad'',
axis=None)
Tenga en cuenta que si necesita hacer cambios en su lugar, use el argumento booleano
inplace
para el método de
replace
:
En su lugar
inplace : boolean, por defecto
False
IfTrue
, en su lugar. Nota: esto modificará cualquier otra vista en este objeto (por ejemplo, una columna de un DataFrame). Devuelve la persona que llama si esto esTrue
.
Retazo
df[''BrandName''].replace(
to_replace=[''ABC'', ''AB''],
value=''A'',
inplace=True
)
Creado el marco de datos:
import pandas as pd
dk=pd.DataFrame({"BrandName":[''A'',''B'',''ABC'',''D'',''AB''],"Specialty":[''H'',''I'',''J'',''K'',''L'']})
Ahora use la función
DataFrame.replace()
:
dk.BrandName.replace(to_replace=[''ABC'',''AB''],value=''A'')
Esta solución cambiará el marco de datos existente en sí:
mydf = pd.DataFrame({"BrandName":["A", "B", "ABC", "D", "AB"], "Speciality":["H", "I", "J", "K", "L"]})
mydf["BrandName"].replace(["ABC", "AB"], "A", inplace=True)
La forma más fácil es usar el método de
replace
en la columna.
Los argumentos son una lista de las cosas que desea reemplazar (aquí
[''ABC'', ''AB'']
) y con qué desea reemplazarlas (la cadena
''A''
en este caso):
>>> df[''BrandName''].replace([''ABC'', ''AB''], ''A'')
0 A
1 B
2 A
3 D
4 A
Esto crea una nueva serie de valores, por lo que debe asignar esta nueva columna al nombre de columna correcto:
df[''BrandName''] = df[''BrandName''].replace([''ABC'', ''AB''], ''A'')
La función loc se puede usar para reemplazar múltiples valores, Documentación para ello: loc
df.loc[df[''BrandName''].isin([ABC'', ''AB''])]=''A''
Solo quería mostrar que no hay diferencia de rendimiento entre las 2 formas principales de hacerlo:
df = pd.DataFrame(np.random.randint(0,10,size=(100, 4)), columns=list(''ABCD''))
def loc():
df1.loc[df1["A"] == 2] = 5
%timeit loc
19.9 ns ± 0.0873 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
def replace():
df2[''A''].replace(
to_replace=2,
value=5,
inplace=True
)
%timeit replace
19.6 ns ± 0.509 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)