Tengo una lista de columnas en un Pandas DataFrame y estoy buscando crear una lista de ciertas columnas sin entrada manual.

Mi problema es que estoy aprendiendo y aún no estoy lo suficientemente informado.

He intentado buscar en Internet pero nada fue mi caso. Pido disculpas si hay un duplicado.

La lista que estoy tratando de cortar se ve así:

['model', 'displ', 'cyl', 'trans', 'drive', 'fuel', 'veh_class', 'air_pollution_score', 'city_mpg', 'hwy_mpg', 'cmb_mpg', 'greenhouse_gas_score', 'smartway']

Aquí está el código que escribí por mi cuenta: dataframe.columns.tolist()[:6,8:10,11]

En este caso, estoy intentando seleccionar todo menos 'air_pollution_score' y 'invernadero_gas_score'

Mi objetivo final es comprender la sintaxis y cómo seleccionar partes de una lista.

4
Garrett Mark Scott 9 may. 2019 a las 16:00

3 respuestas

La mejor respuesta

Puede hacer eso, o simplemente puede usar drop para eliminar las columnas que no desea:

dataframe.drop(['air_pollution_score', 'greenhouse_gas_score'], axis=1).columns

Tenga en cuenta que debe especificar axis=1 para que pandas sepa que desea eliminar columnas, no filas.

Incluso si quisieras usar la sintaxis list, diría que es mejor usar una comprensión list en su lugar; algo como esto:

exclude_columns = ['air_pollution_score', 'greenhouse_gas_score']

[col for col in dataframe.columns if col not in exclude_columns]

Esto obtiene todas las columnas en el marco de datos a menos que estén presentes en exclude_columns.

5
gmds 9 may. 2019 a las 22:56

Solución simple con pandas

import pandas as pd

data = pd.read_csv('path to your csv file')
df = data['column1','column2','column3',....]

Nota: datos es su fuente que ya ha cargado utilizando pandas, las nuevas columnas seleccionadas se almacenarán en un nuevo marco de datos df

0
Csmasterme 9 may. 2019 a las 13:06

Digamos que df es su marco de datos. En realidad, puede usar filtros y lambda, aunque rápidamente se vuelve demasiado largo. Presento esto como una alternativa "one-liner" a la respuesta de @gmds.

df[
  list(filter(
    lambda x: ('air_pollution_score' not in x) and ('greenhouse_gas_x' not in x), 
    df.columns.values
  ))
]

Lo que está sucediendo aquí son:

  1. filter aplica una función a una lista para incluir solo elementos que siguen una función definida /
  2. Definimos esa función usando lambda para verificar solo si 'air_pollution_score' o 'greenhouse_gas_x' están en la lista.
  3. Estamos filtrando en la lista df.columns.values; entonces la lista resultante solo retendrá los elementos que no fueron los que mencionamos.
  4. Estamos utilizando la sintaxis df[['column1', 'column2']], que es "crear un nuevo marco de datos pero que solo contiene las 2 columnas que defino".
1
dTanMan 9 may. 2019 a las 14:15