2017-07-22 1 views
1

J'ai une liste de DataFrames qui ressemblent à ceci,Renommer des colonnes dans une liste de données? (Pandas)

dfs

[     
    var1  var1 
14.171250 13.593813 
13.578317 13.595329 
10.301850 13.580139 
9.930217 13.593278 
6.192517 13.561943 
7.738100 13.565149 
6.197983 13.572509,     
    var1  var2  
2.456183 5.907528 
5.052017 5.955731 
5.960000 5.972480 
8.039317 5.984608 
7.559217 5.985348 
6.933633 5.979438 
... 
] 

Je veux renommer var1 et var2 dans chaque dataframe être Foo et Hoo. Je tried ce qui suit,

renames_dfs = [] 
for df in dfs: 
    renames_dfs.append(df.rename(columns={'var1':'Foo','var2':'Hoo'},inplace = True)) 

Ce retourne une liste vide de None. Quelle erreur fais-je ici quand je renomme les noms de colonnes?

+1

enlever seulement 'inplace = true', il retourne 'None' – jezrael

+0

Parfait! Ça a marché! –

+1

Ou, 'df.columns = ['Foo', 'Hoo']' –

Répondre

1

Votre renvoie le code existant None car inplace=True met à jour le enplace de référence.

En tant qu'amélioration suggérée à df.rename, vous n'avez pas besoin de dupliquer vos données en les ajoutant à une nouvelle liste. Vous pouvez simplement affecter à df.columns directement:

for df in dfs: 
    df.columns = ['Foo', 'Hoo'] 

mettra à jour tous les dataframes dans la même liste sans avoir à créer une nouvelle liste.

+1

Merci pour l'explication! –

1

Le paramètre inplace=True renvoie toujours None.

Vous pouvez donc utiliser:

renames_dfs = [] 
for df in dfs: 
    df.rename(columns={'var1':'Foo','var2':'Hoo'},inplace = True) 
    renames_dfs.append(df) 

Mais je pense mieux:

renames_dfs = [] 
for df in dfs: 
    renames_dfs.append(df.rename(columns={'var1':'Foo','var2':'Hoo'})) 
+1

merci pour l'explication! –

2

Vous pouvez le faire comme ça.

[df.rename(columns={'var1':'Foo','var2':'Hoo'},inplace=True) for df in dfs] 

Sortie:

[None,None] 

MAIS ....

dfs 

Sortie:

[  Foo  Hoo 
0 0.463904 0.765987 
1 0.473314 0.609793 
2 0.505549 0.449539 
3 0.508157 0.444993 
4 0.604366 0.368044,   Foo  Hoo 
0 0.241526 0.225990 
1 0.609949 0.454891 
2 0.523094 0.443431 
3 0.525026 0.714601 
4 0.002260 0.763454] 
+0

Nooo .... n'utilisez pas une liste de compréhension pour créer des effets secondaires. C'est un anti-pattern. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ, cela vous dérangerait-il d'expliquer ces "effets secondaires"? – MaxU

+0

@MaxU Fondamentalement, le seul but de la liste comp ici est de faire quelque chose en plus de composer la liste. Le contenu réel de la liste est ignoré, mais les actions qui sont prises pour le créer ont un effet sur autre chose - effet secondaire. –