J'ai donc initialisé un DataFrame pandas vide et je voudrais ajouter de manière itérative des listes (ou des séries) sous forme de lignes dans ce DataFrame. Quelle est la meilleure façon de faire cela?
Parfois, il est plus facile de faire toutes les ajouts en dehors des pandas, il suffit alors de créer le DataFrame en une seule fois.
>>> import pandas as pd
>>> simple_list=[['a','b']]
>>> simple_list.append(['e','f'])
>>> df=pd.DataFrame(simple_list,columns=['col1','col2'])
col1 col2
0 a b
1 e f
Voici une solution simple et stupide:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
Pourriez-vous faire quelque chose comme ça?
>>> import pandas as pd
>>> df = pd.DataFrame(columns=['col1', 'col2'])
>>> df = df.append(pd.Series(['a', 'b'], index=['col1','col2']), ignore_index=True)
>>> df = df.append(pd.Series(['d', 'e'], index=['col1','col2']), ignore_index=True)
>>> df
col1 col2
0 a b
1 d e
Quelqu'un a-t-il une solution plus élégante?
Suite à la réponse de Mike Chirico ... si vous souhaitez ajouter une liste après le cadre de données est déjà rempli ...
>>> list = [['f','g']]
>>> df = df.append(pd.DataFrame(list, columns=['col1','col2']),ignore_index=True)
>>> df
col1 col2
0 a b
1 d e
2 f g
Voici une fonction qui, étant donné une image déjà créée, ajoutera une liste en tant que nouvelle ligne. Cela devrait probablement comporter des capteurs d'erreur, mais si vous savez exactement ce que vous ajoutez, cela ne devrait pas être un problème.
import pandas as pd
import numpy as np
def addRow(df,ls):
"""
Given a dataframe and a list, append the list as a new row to the dataframe.
:param df: <DataFrame> The original dataframe
:param ls: <list> The new row to be added
:return: <DataFrame> The dataframe with the newly appended row
"""
numEl = len(ls)
newRow = pd.DataFrame(np.array(ls).reshape(1,numEl), columns = list(df.columns))
df = df.append(newRow, ignore_index=True)
return df
Si vous souhaitez ajouter une série et utiliser l'index de la série en tant que colonnes du DataFrame, il vous suffit d'ajouter la série entre crochets:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame()
In [3]: row=pd.Series([1,2,3],["A","B","C"])
In [4]: row
Out[4]:
A 1
B 2
C 3
dtype: int64
In [5]: df.append([row],ignore_index=True)
Out[5]:
A B C
0 1 2 3
[1 rows x 3 columns]
Sans le ignore_index=True
vous n’obtenez pas d’index approprié.
utilisez simplement loc:
>>> df
A B C
one 1 2 3
>>> df.loc["two"] = [4,5,6]
>>> df
A B C
one 1 2 3
two 4 5 6
Le moyen le plus simple:
my_list = [1,2,3,4,5]
df['new_column'] = pd.Series(my_list).values
Modifier:
N'oubliez pas que la longueur de la nouvelle liste doit être identique à celle du Dataframe correspondant.