varias seleccionar seleccion filas columnas columna python pandas chained-assignment

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'']]