Menambahkan daftar atau rangkaian ke DataFrame pandas sebagai baris?


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

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]

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)

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?


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

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.


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

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

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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.