2017-07-19 1 views
2

J'ai une liste de DataFrames qui ont les mêmes colonnes et des valeurs différentes. Je souhaite supprimer certaines colonnes de la liste des DataFrames en une ligne dans les pandas.Suppression de colonnes de DataFrames à partir d'une liste de DataFrames à l'aide de List Compréhension (Pandas)

Pour l'instant, j'ai essayé (dfs a liste des trames de données)

dfs.drop([col for col in ['var1', 'var2'] if col in dfs], axis=1, inplace=True) 

et

dfs[dfs.drop([col for col in ['var1', 'var2'] if col in dfs], axis=1, inplace=True)] 

les deux sont de donner la même erreur:

AttributeError: 'list' object has no attribute 'drop'

type(dfs) 
>> list 

Cependant, quand je peux faire une boucle à travers chaque DataFRame de t il liste dfs en utilisant for boucle, je peux laisser tomber les colonnes.

Comment puis-je le faire dans la compréhension de la liste chez les pandas?

+0

Mais 'dfs' est une liste, pas une seule image. –

+2

Une compréhension de liste n'est pas la manière idiomatique de résoudre ce problème. –

+0

'dfs' est une liste de DataFrames –

Répondre

5

En supposant que vous souhaitez supprimer les colonnes ['var1', 'var2'] et que vos trames de données ont les mêmes colonnes, vous devez utiliser une boucle for.

for df in dfs: 
    df.drop(['var1', 'var2'], axis=1, inplace=True) 

Sinon, la liste comp exp en est:

[df.drop(['var1', 'var2'], axis=1, inplace=True) for df in dfs] 

Cela vous renvoie une liste de None s. Vous pouvez également utiliser ceci:

dfs = [df.drop(['var1', 'var2'], axis=1) for df in dfs] 

Omettre la inplace=True provoquera df.drop de retourner une nouvelle dataframe, plutôt que de mettre à jour inplace et retour Aucun. Je recommande celui-ci si vous utilisez des compositions de liste. En fin de compte, je recommande fortement d'utiliser la boucle.

+0

Est-ce que cela fonctionnera? La boucle n'est-elle pas itérée sur une copie de la liste (des dataframes) au lieu de la liste elle-même? –

+1

@AdarshChavakula Lorsque vous travaillez avec des objets modifiables comme des données, vous travaillez directement avec la référence, et non une copie. Cela fonctionne vraiment. –

+1

Pour un exercice, créez 'df', puis assignez' df' à 'df1'. Essayez de supprimer une colonne dans 'df1', et la modification est également reflétée dans' df'. –