Extraer columnas seleccionadas específicas al nuevo DataFrame como una copia

Resuelto SpeedCoder5 asked hace 8 años • 10 respuestas

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 para R. El siguiente código no funciona, genera un error y ciertamente no es la forma en que lo hacen los pandas.

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 en que lo hacen los pandas?

SpeedCoder5 avatar Jan 09 '16 00:01 SpeedCoder5
Aceptado

Hay una manera de hacer esto y en realidad se parece a R.

new = old[['A', 'C', 'D']].copy()

Aquí simplemente selecciona las columnas que desea del marco de datos original y crea una variable para ellas. Si desea modificar el nuevo marco de datos, probablemente desee utilizarlo .copy()para evitar un archivo SettingWithCopyWarning.

Un método alternativo es utilizar filterel cual creará una copia de forma predeterminada:

new = old.filter(['A','B','D'], axis=1)

Finalmente, dependiendo de la cantidad de columnas en su marco de datos original, podría ser más conciso expresar esto usando drop(esto también creará una copia de forma predeterminada):

new = old.drop('B', axis=1)
johnchase avatar Jan 08 '2016 17:01 johnchase

La forma más fácil es

new = old[['A','C','D']]

.

stidmatt avatar Jun 11 '2019 18:06 stidmatt

Otra forma más sencilla parece ser:

new = pd.DataFrame([old.A, old.B, old.C]).transpose()

donde old.column_namete daré una serie. Haga una lista de todas las series de columnas que desea conservar y pásela al constructor de 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
Hit avatar Jan 15 '2019 06:01 Hit