Extracción de columnas seleccionadas específicas al nuevo DataFrame como una copia
⏰ 3 minutos de lectura
SpeedCoder5
Tengo un DataFrame de pandas con 4 columnas y quiero crear un nuevo marco de datos que solamente tiene 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 pandasnica 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 pandasnica de hacerlo?
john chase
Hay una manera de hacer esto y en realidad se ve similar 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, probablemente querrá usar .copy() para evitar un SettingWithCopyWarning.
Un método alternativo es utilizar filter que creará una copia por defecto:
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 breve expresar esto usando un drop (esto también creará una copia por defecto):
new = old.drop('B', axis=1)
Una precaución si solo copia una columna: En old[['A']].copy(), los corchetes dobles son necesarios para crear un nuevo marco de datos. Tenga en cuenta que old['A'].copy() solo creará una Serie.
– intotecho
1 de febrero de 2019 a las 2:18
La forma más fácil es
new = old[['A','C','D']]
.
Esto no es hacer una copia a menos que llames explícitamente a .copy()
– Silvano
30 de octubre de 2019 a las 2:23
esto copia por defecto.
– Nguai al
5 de febrero de 2020 a las 6:49
@Nguaial no se especifica el comportamiento de la indexación simple. No sabrás si obtienes una copia o una vista. Consulte la documentación para obtener más detalles: pandas.pydata.org/pandas-docs/stable/user_guide/…
– Ole Fass
5 de mayo de 2020 a las 9:38
Como se mencionó en el comentario anterior, esto creará una vista y no una copia.
– le_llama
22 de junio de 2021 a las 8:57
Pegar
Otra forma más simple parece ser:
new = pd.DataFrame([old.A, old.B, old.C]).transpose()
dónde old.column_name le 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
funciona, pero no si column_name tiene caracteres especiales.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información