Odpowiedzi:
Czasami łatwiej jest wykonać wszystkie dołączenia poza pandami, a następnie po prostu utworzyć ramkę DataFrame w jednym ujęciu.
>>> 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
.
Oto proste i głupie rozwiązanie:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Czy mógłbyś zrobić coś takiego?
>>> 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
Czy ktoś ma bardziej eleganckie rozwiązanie?
Idąc za odpowiedzią Mike'a Chirico ... jeśli chcesz dołączyć listę po wypełnieniu ramki danych ...
>>> 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
Jeśli chcesz dodać serię i użyć indeksu serii jako kolumn DataFrame, wystarczy dodać serię w nawiasach:
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]
Bez ignore_index=True
tego nie otrzymasz odpowiedniego indeksu.
Oto funkcja, która, biorąc pod uwagę już utworzoną ramkę danych, dołączy listę jako nowy wiersz. Powinno to prawdopodobnie mieć wrzucone łapacze błędów, ale jeśli dokładnie wiesz, co dodajesz, nie powinno to stanowić problemu.
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
Jak wspomniano tutaj - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , musisz najpierw przekonwertuj listę na serię, a następnie dołącz serię do ramki danych.
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)