Bu yüzden boş bir Pandalar DataFrame başlattım ve bu DataFrame'deki satırlar olarak listeleri (veya Serileri) yinelemeli olarak eklemek istiyorum. Bunu yapmanın en iyi yolu nedir?
Yanıtlar:
Bazen tüm eklemeyi pandaların dışında yapmak daha kolaydır, o zaman DataFrame'i tek seferde oluşturun.
>>> 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
.
İşte basit ve aptalca bir çözüm:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Böyle bir şey yapabilir misin?
>>> 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
Daha zarif bir çözümü olan var mı?
Mike Chirico'nun cevabını takiben ... veri çerçevesi zaten doldurulduktan sonra bir liste eklemek istiyorsanız ...
>>> 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
Bir Seri eklemek ve Seri dizinini DataFrame'in sütunları olarak kullanmak istiyorsanız, yalnızca Seriyi köşeli parantezler arasına eklemeniz gerekir:
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]
Ancak ignore_index=True
doğru endeksi alamıyorsunuz.
Burada, önceden oluşturulmuş bir veri çerçevesi verildiğinde, listeyi yeni bir satır olarak ekleyecek bir işlev var. Bu muhtemelen hata yakalayıcılara sahip olmalıdır, ancak tam olarak ne eklediğinizi biliyorsanız, o zaman bir sorun olmamalıdır.
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
Burada belirtildiği gibi - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , önce yapmanız gerekecek listeyi bir diziye dönüştürün ve ardından diziyi veri çerçevesine ekleyin.
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)