Pandalar DataFrame'e satır olarak bir liste veya dizi mi ekliyorsunuz?


Yanıtlar:


136

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

2
Soru, tüm satırların önceden bilinmediğini ima ediyor gibi görünüyor.
DISC-O

107
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]

9
.Txt dosyasının sonuna eklemek istiyorsanız bu en kolayıdır df.
Sid

3
Bu tam olarak istediğim şey, çok basit ama etkili!
MSalty

3
Neden seçilen cevap bu değil?
Lucas Azevedo

1
Bu genel olarak uygundur, ancak yalnızca 0'da başlayan monoton olarak artan bir endeksiniz varsa işe yarar.
dreab

61

İşte basit ve aptalca bir çözüm:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)

27
Bunun bir liste değil, bir söz
eklediğine dikkat edin

36

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ı?


1
İşte daha basit ve aptal bir çözüm: `` pandaları pd olarak içe aktar df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Bu eke dikkat edin yerinde olmaz. `` `
Jaidev Deshpande

27

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 kopya oluşturur mu? Yerinde eklemek mümkün mü?
lucid_dreamer

4

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=Truedoğru endeksi alamıyorsunuz.


4

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

3

Listeyi append işlevi içinde bir veri çerçevesine dönüştürmek, bir döngüde uygulandığında da çalışır

import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))

2

sadece loc kullanın:

>>> df
     A  B  C
one  1  2  3
>>> df.loc["two"] = [4,5,6]
>>> df
     A  B  C
one  1  2  3
two  4  5  6


0

En basit yol:

my_list = [1,2,3,4,5]
df['new_column'] = pd.Series(my_list).values

Düzenle:

Yeni listenin uzunluğunun karşılık gelen Dataframe ile aynı olması gerektiğini unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.