python - columnas - seleccionar filas pandas
Extraer columnas seleccionadas específicas a un nuevo DataFrame como copia (6)
Tengo un DataFrame de pandas con 4 columnas y quiero crear un nuevo DataFrame que solo tenga tres de las columnas. Esta pregunta es similar a: Extraer columnas específicas de un marco de datos pero para pandas no R. El siguiente código no funciona, genera un error, y ciertamente no es la forma pandanic de hacerlo.
import pandas as pd
old = pd.DataFrame({''A'' : [4,5], ''B'' : [10,20], ''C'' : [100,50], ''D'' : [-30,-50]})
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can''t be an iterator
¿Cuál es la forma pandasnic de hacerlo?
Hay una forma de hacerlo y en realidad se parece a R
new = old[[''A'', ''C'', ''D'']].copy()
Aquí solo está seleccionando las columnas que desea del marco de datos original y creando una variable para ellas.
Si desea modificar el nuevo marco de datos, es probable que desee usar
.copy()
para evitar un
SettingWithCopyWarning
.
Un método alternativo es usar el
filter
que creará una copia por defecto:
new = old.filter([''A'',''B'',''D''], axis=1)
Finalmente, dependiendo del número de columnas en su marco de datos original, podría ser más sucinto expresar esto usando una
drop
(esto también creará una copia por defecto):
new = old.drop(''B'', axis=1)
La forma más fácil es
def select_columns(data_frame, column_names):
new_frame = data_frame.loc[:, column_names]
return new_frame
.
Otra forma más simple parece ser:
nuevo = pd.DataFrame ([old.A, old.B, old.C]). transpose ()
donde old.column_name te dará una serie. Haga una lista de todas las series de columnas que desee retener y páselo al constructor DataFrame. Necesitamos hacer una transposición para ajustar la forma.
In [14]:pd.DataFrame([old.A,old.B,old.C]).transpose()
Out[14]:
A B C
0 4 10 100
1 5 20 50
Por lo que puedo decir, no necesariamente necesita especificar el eje cuando utiliza la función de filtro.
new = old.filter([''A'',''B'',''D''])
devuelve el mismo marco de datos que
new = old.filter([''A'',''B'',''D''], axis=1)
columnas por índice:
# selected column index: 1, 6, 7 new = old.iloc[: , [1, 6, 7]].copy()
Forma funcional genérica
selected_columns = [''A'', ''C'', ''D'']
new = select_columns(old, selected_columns)
Específico para su problema anterior
new = old[[''A'',''C'',''D'']]