Dołączasz listę lub serię do pandy DataFrame jako wiersz?
110
Dlatego zainicjowałem puste pandy DataFrame i chciałbym iteracyjnie dołączać listy (lub serie) jako wiersze w tej ramce DataFrame. Jaki jest najlepszy sposób na zrobienie tego?
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
Oto prostsze i głupie rozwiązanie: `` importuj pandy jako pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Zauważ, że to dołączenie nie dzieje się na miejscu. ``
Jaidev Deshpande
27
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
0123[1 rows x 3 columns]
Bez ignore_index=Truetego 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
Odpowiedzi:
Czasami łatwiej jest wykonać wszystkie dołączenia poza pandami, a następnie po prostu utworzyć ramkę DataFrame w jednym ujęciu.
źródło
źródło
df
.Oto proste i głupie rozwiązanie:
źródło
Czy mógłbyś zrobić coś takiego?
Czy ktoś ma bardziej eleganckie rozwiązanie?
źródło
Idąc za odpowiedzią Mike'a Chirico ... jeśli chcesz dołączyć listę po wypełnieniu ramki danych ...
źródło
Jeśli chcesz dodać serię i użyć indeksu serii jako kolumn DataFrame, wystarczy dodać serię w nawiasach:
Bez
ignore_index=True
tego nie otrzymasz odpowiedniego indeksu.źródło
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.
źródło
Konwersja listy do ramki danych w ramach funkcji dołączania działa, również w przypadku zastosowania w pętli
źródło
po prostu użyj loc:
źródło
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.
źródło
Najprostszy sposób:
Edytować:
Nie zapominaj, że długość nowej listy powinna być taka sama jak odpowiadającej jej ramki danych.
źródło