Menambahkan daftar atau rangkaian ke DataFrame pandas sebagai baris?

107

Jadi saya telah menginisialisasi pandas DataFrame kosong dan saya ingin menambahkan daftar (atau Seri) secara berulang sebagai baris di DataFrame ini. Apa cara terbaik untuk melakukan ini?

Wes Field
sumber
Jawaban yang lebih baik dapat ditemukan di bawah: stackoverflow.com/questions/10715965/…
Yuval Atzmon

Jawaban:

133

Terkadang lebih mudah untuk melakukan semua penambahan di luar panda, lalu, buat saja DataFrame dalam satu kesempatan.

>>> 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
Mike Chirico
sumber
1
Pertanyaan tersebut sepertinya menyiratkan bahwa tidak semua baris diketahui di depan.
DISC-O
103
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
Ashot Matevosyan
sumber
8
Ini adalah yang termudah jika Anda ingin menambahkan ke bagian akhir df.
Sid
2
Inilah yang saya inginkan, sangat sederhana namun efektif!
MSalty
3
Mengapa ini bukan jawaban yang dipilih?
Lucas Azevedo
Ini umumnya baik-baik saja tetapi hanya berfungsi jika Anda memiliki indeks yang meningkat secara monoton yang dimulai pada 0.
dreab
59

Inilah solusi sederhana dan bodoh:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Jaidev Deshpande
sumber
25
Perhatikan bahwa ini menambahkan sebuah dict, bukan daftar
anthnyprschka
36

Bisakah Anda melakukan sesuatu seperti ini?

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

Apakah ada yang punya solusi yang lebih elegan?

Alex Woolford
sumber
1
Berikut solusi yang lebih sederhana dan bodoh: `` `import pandas as pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Perhatikan bahwa penambahan ini tidak terjadi di tempat. ``
Jaidev Deshpande
27

Mengikuti jawaban Mike Chirico ... jika Anda ingin menambahkan daftar setelah kerangka data sudah terisi ...

>>> 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
Jay Marm
sumber
Apakah itu membuat salinan? Apakah mungkin untuk menambahkan di tempat?
lucid_dreamer
4

Jika Anda ingin menambahkan Seri dan menggunakan indeks Seri sebagai kolom DataFrame, Anda hanya perlu menambahkan Seri di antara tanda kurung:

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]

Meskipun ignore_index=TrueAnda tidak mendapatkan indeks yang tepat.

bmello
sumber
4

Berikut adalah fungsi yang, mengingat kerangka data yang sudah dibuat, akan menambahkan daftar sebagai baris baru. Ini mungkin harus memiliki penangkap kesalahan, tetapi jika Anda tahu persis apa yang Anda tambahkan maka itu seharusnya tidak menjadi masalah.

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
jadki
sumber
3

Mengonversi daftar ke bingkai data dalam fungsi append berfungsi, juga ketika diterapkan dalam satu putaran

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

cukup gunakan loc:

>>> 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
Qinsi
sumber
0

Cara termudah:

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

Edit:

Jangan lupa bahwa panjang daftar baru harus sama dengan Dataframe yang sesuai.

Ghanem
sumber