การต่อท้ายรายการหรือซีรีส์ใน DataFrame แพนด้าเป็นแถว?


111

ดังนั้นฉันจึงเริ่มต้น DataFrame แพนด้าที่ว่างเปล่าและฉันต้องการเพิ่มรายการ (หรือซีรี่ส์) ซ้ำเป็นแถวใน DataFrame นี้ วิธีที่ดีที่สุดในการทำคืออะไร?


พบคำตอบที่ดีกว่าได้ที่: stackoverflow.com/questions/10715965/…
Yuval Atzmon

คำตอบ:


136

บางครั้งการต่อท้ายทั้งหมดนอกแพนด้าก็ง่ายกว่าจากนั้นเพียงสร้าง 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

2
คำถามดูเหมือนจะบอกเป็นนัยว่าไม่ทราบแถวทั้งหมดที่อยู่ข้างหน้า
DISC-O

107
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]

9
นี่เป็นวิธีที่ง่ายที่สุดหากคุณต้องการเพิ่มส่วนท้ายของไฟล์df.
Sid

3
นี่คือสิ่งที่ฉันต้องการเรียบง่าย แต่มีประสิทธิภาพ!
MSalty

3
เหตุใดจึงไม่ใช่คำตอบที่เลือก
Lucas Azevedo

1
โดยทั่วไปแล้วสิ่งนี้ใช้ได้ แต่จะใช้ได้เฉพาะเมื่อคุณมีดัชนีที่เพิ่มขึ้นอย่าง
จำเจ

61

นี่เป็นวิธีแก้ปัญหาที่ง่ายและโง่:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)

27
โปรดทราบว่านี่เป็นการต่อท้ายคำสั่งไม่ใช่รายการ
anthnyprschka

36

คุณสามารถทำสิ่งนี้ได้หรือไม่?

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

ใครมีวิธีแก้ปัญหาที่สวยหรูกว่านี้ไหม


1
นี่เป็นวิธีแก้ปัญหาที่ง่ายและโง่กว่า: `` นำเข้าแพนด้าเป็น pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignex = True) # โปรดทราบว่าการต่อท้ายนี้ ไม่ได้เกิดขึ้นในสถานที่ ``
Jaidev Deshpande

27

ต่อไปนี้เป็นคำตอบของ 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

มันสร้างสำเนาหรือไม่? สามารถผนวกเข้าที่ได้หรือไม่?
lucid_dreamer

4

หากคุณต้องการเพิ่ม 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คุณไม่ได้รับดัชนีที่เหมาะสม


4

นี่คือฟังก์ชั่นที่ได้รับจาก 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

3

การแปลงรายการเป็นกรอบข้อมูลภายในฟังก์ชันผนวกจะใช้งานได้เช่นกันเมื่อใช้ในการวนซ้ำ

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


1

ตามที่กล่าวไว้ที่นี่ - 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)

0

วิธีที่ง่ายที่สุด:

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

แก้ไข:

อย่าลืมว่าความยาวของรายการใหม่ควรเท่ากันกับ Dataframe ที่เกี่ยวข้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.