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?
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?
Jawaban:
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
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
df
.
Inilah solusi sederhana dan bodoh:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
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?
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
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=True
Anda tidak mendapatkan indeks yang tepat.
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
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]))
Seperti disebutkan di sini - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , Anda harus terlebih dahulu konversikan daftar menjadi rangkaian lalu tambahkan rangkaian ke bingkai data.
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)