J'ai donc initialisé un pandas DataFrame 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 procéder?
J'ai donc initialisé un pandas DataFrame 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 procéder?
Réponses:
Parfois, il est plus facile de faire tout l'ajout en dehors des pandas, puis de créer simplement le DataFrame en un seul coup.
>>> 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
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
df
.
Voici une solution simple et stupide:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
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 at-il une solution plus élégante?
Suite à la réponse de Mike Chirico ... si vous souhaitez ajouter une liste une fois que le dataframe 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
Si vous souhaitez ajouter une série et utiliser l'index de la série comme 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 cela, ignore_index=True
vous n'obtenez pas un index approprié.
Voici une fonction qui, étant donné un dataframe déjà créé, ajoutera une liste en tant que nouvelle ligne. Cela devrait probablement avoir 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
Comme mentionné ici - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , vous devrez d'abord convertissez la liste en série, puis ajoutez la série au dataframe.
df = pd.DataFrame([[1, 2], [3, 4]], columns = ["a", "b"])
to_append = [5, 6]
a_series = pd.Series(to_append, index = df.columns)
df = df.append(a_series, ignore_index=True)