Extraer columnas seleccionadas específicas al nuevo DataFrame como una copia
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?
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 filter
el 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)
La forma más fácil es
new = old[['A','C','D']]
.
Otra forma más sencilla parece ser:
new = 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 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