Risposte:
A volte è più facile fare tutte le aggiunte al di fuori dei panda, quindi, basta creare il DataFrame in un colpo solo.
>>> 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
.
Ecco una soluzione semplice e stupida:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Potresti fare qualcosa di simile?
>>> 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
Qualcuno ha una soluzione più elegante?
Seguendo la risposta di Mike Chirico ... se vuoi aggiungere un elenco dopo che il dataframe è già popolato ...
>>> 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
Se vuoi aggiungere una serie e utilizzare l'indice della serie come colonne del DataFrame, devi solo aggiungere la serie tra parentesi:
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]
Senza il ignore_index=True
tuo indice corretto.
Ecco una funzione che, dato un dataframe già creato, aggiungerà un elenco come una nuova riga. Questo dovrebbe probabilmente contenere dei rilevatori di errori, ma se sai esattamente cosa stai aggiungendo, non dovrebbe essere un problema.
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
Come accennato qui - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , dovrai prima converti l'elenco in una serie, quindi aggiungi la serie a 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)