ดังนั้นฉันจึงเริ่มต้น DataFrame แพนด้าที่ว่างเปล่าและฉันต้องการเพิ่มรายการ (หรือซีรี่ส์) ซ้ำเป็นแถวใน DataFrame นี้ วิธีที่ดีที่สุดในการทำคืออะไร?
ดังนั้นฉันจึงเริ่มต้น DataFrame แพนด้าที่ว่างเปล่าและฉันต้องการเพิ่มรายการ (หรือซีรี่ส์) ซ้ำเป็นแถวใน DataFrame นี้ วิธีที่ดีที่สุดในการทำคืออะไร?
คำตอบ:
บางครั้งการต่อท้ายทั้งหมดนอกแพนด้าก็ง่ายกว่าจากนั้นเพียงสร้าง DataFrame ในช็อตเดียว
>>> 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
.
นี่เป็นวิธีแก้ปัญหาที่ง่ายและโง่:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
คุณสามารถทำสิ่งนี้ได้หรือไม่?
>>> 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
ใครมีวิธีแก้ปัญหาที่สวยหรูกว่านี้ไหม
ต่อไปนี้เป็นคำตอบของ Mike Chirico ... หากคุณต้องการต่อท้ายรายการหลังจากที่มีการเติม dataframe แล้ว ...
>>> 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
หากคุณต้องการเพิ่ม Series และใช้ดัชนี Series เป็นคอลัมน์ของ DataFrame คุณจะต้องต่อท้าย Series ระหว่างวงเล็บ:
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]
ยกเว้นกรณีที่ignore_index=True
คุณไม่ได้รับดัชนีที่เหมาะสม
นี่คือฟังก์ชั่นที่ได้รับจาก dataframe ที่สร้างไว้แล้วจะต่อท้ายรายการเป็นแถวใหม่ สิ่งนี้น่าจะมีตัวจับข้อผิดพลาดเกิดขึ้น แต่ถ้าคุณรู้แน่ชัดว่าคุณกำลังเพิ่มอะไรก็ไม่ควรเป็นปัญหา
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
การแปลงรายการเป็นกรอบข้อมูลภายในฟังก์ชันผนวกจะใช้งานได้เช่นกันเมื่อใช้ในการวนซ้ำ
import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))
เพียงใช้ 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
ตามที่กล่าวไว้ที่นี่ - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-pythonก่อนอื่นคุณต้อง แปลงรายการเป็นซีรีส์จากนั้นผนวกซีรีส์เข้ากับดาต้าเฟรม
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)
วิธีที่ง่ายที่สุด:
my_list = [1,2,3,4,5]
df['new_column'] = pd.Series(my_list).values
แก้ไข:
อย่าลืมว่าความยาวของรายการใหม่ควรเท่ากันกับ Dataframe ที่เกี่ยวข้อง