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?
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 col20 a b1 e f
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 col20 a b1 d e2 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 pdIn[2]: df = pd.DataFrame()In[3]: row=pd.Series([1,2,3],["A","B","C"])In[4]: rowOut[4]:
A 1
B 2
C 3
dtype: int64In[5]: df.append([row],ignore_index=True)Out[5]:
A B C0123[1 rows x 3 columns]
Meskipun ignore_index=TrueAnda 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
Jawaban:
Terkadang lebih mudah untuk melakukan semua penambahan di luar panda, lalu, buat saja DataFrame dalam satu kesempatan.
sumber
sumber
df
.Inilah solusi sederhana dan bodoh:
sumber
Bisakah Anda melakukan sesuatu seperti ini?
Apakah ada yang punya solusi yang lebih elegan?
sumber
Mengikuti jawaban Mike Chirico ... jika Anda ingin menambahkan daftar setelah kerangka data sudah terisi ...
sumber
Jika Anda ingin menambahkan Seri dan menggunakan indeks Seri sebagai kolom DataFrame, Anda hanya perlu menambahkan Seri di antara tanda kurung:
Meskipun
ignore_index=True
Anda tidak mendapatkan indeks yang tepat.sumber
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.
sumber
Mengonversi daftar ke bingkai data dalam fungsi append berfungsi, juga ketika diterapkan dalam satu putaran
sumber
cukup gunakan loc:
sumber
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.
sumber
Cara termudah:
Edit:
Jangan lupa bahwa panjang daftar baru harus sama dengan Dataframe yang sesuai.
sumber