ฉันจะรวมสองกรอบข้อมูลได้อย่างไร


106

ฉันใช้เฟรมข้อมูล Pandas Dฉันมีกรอบข้อมูลเบื้องต้นพูด ฉันดึงข้อมูลสองเฟรมออกมาดังนี้:

A = D[D.label == k]
B = D[D.label != k]

จากนั้นฉันเปลี่ยนป้ายกำกับในAและB

A.label = 1
B.label = -1

ฉันต้องการรวม A และ B เพื่อที่ฉันจะได้เป็นกรอบข้อมูลเดียวบางอย่างเช่นการรวมกัน ลำดับของข้อมูลไม่สำคัญ อย่างไรก็ตามเมื่อเราสุ่มตัวอย่าง A และ B จาก D พวกมันจะคงดัชนีไว้จาก D

คำตอบ:


150

ฉันเชื่อว่าคุณสามารถใช้appendวิธีการ

bigdata = data1.append(data2, ignore_index=True)

เพื่อให้ดัชนีของพวกเขาเพียงแค่อย่าใช้ignore_indexคำหลัก ...


1
นี้ได้ผล จะสร้าง DataFrame ใหม่แม้ว่า มีวิธีทำแบบอินไลน์ไหม? นั่นจะดีสำหรับเมื่อฉันโหลดข้อมูลจำนวนมากจากฐานข้อมูลเป็นชุดดังนั้นฉันจึงสามารถอัปเดต DataFrame ซ้ำได้โดยไม่ต้องสร้างสำเนาทุกครั้ง
Andrew

1
ใช่เป็นไปได้ดู: stackoverflow.com/a/46661368/5717580
martin-martin

91

คุณยังสามารถใช้pd.concatซึ่งมีประโยชน์อย่างยิ่งเมื่อคุณเข้าร่วมมากกว่าสองดาต้าเฟรม:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)

ฉันต้องการใช้สิ่งนี้ แต่ฉันกำลังพยายามเชื่อมสองคอลัมน์ที่มีชื่อเดียวกัน o_O
ตลอดชีวิตเรียนรู้

45

คิดว่าจะเพิ่มที่นี่ในกรณีที่มีคนเห็นว่ามีประโยชน์ @ostrokach ได้กล่าวไว้แล้วว่าคุณสามารถผสานเฟรมข้อมูลข้ามแถวได้อย่างไร

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

ในการผสานข้ามคอลัมน์คุณสามารถใช้ไวยากรณ์ต่อไปนี้:

df_col_merged = pd.concat([df_a, df_b], axis=1)

14

มีวิธีแก้ปัญหาอื่นสำหรับกรณีที่คุณกำลังทำงานกับข้อมูลขนาดใหญ่และจำเป็นต้องเชื่อมต่อชุดข้อมูลหลายชุด concatจะได้รับประสิทธิภาพที่เข้มข้นดังนั้นหากคุณไม่ต้องการสร้าง df ใหม่ทุกครั้งคุณสามารถใช้list compleance แทน :

frames = [ process_file(f) for f in dataset_files ]
result = pd.append(frames)

(ตามที่ระบุไว้ที่นี่ในเอกสารที่ด้านล่างของส่วน):

หมายเหตุ : เป็นที่น่าสังเกตว่าconcat(และด้วยเหตุนี้append) ทำสำเนาข้อมูลทั้งหมดและการใช้ฟังก์ชันนี้ซ้ำอย่างต่อเนื่องสามารถสร้างประสิทธิภาพที่สำคัญได้ หากคุณจำเป็นต้องใช้การดำเนินการกับชุดข้อมูลหลายชุดให้ใช้การทำความเข้าใจรายการ


2

หากคุณต้องการที่จะปรับปรุง / เปลี่ยนค่านิยมของ dataframe แรกdf1ที่มีค่าของ df2dataframe คุณสามารถทำได้โดยทำตามขั้นตอน -

ขั้นตอนที่ 1:ตั้งค่าดัชนีของดาต้าเฟรมแรก (df1)

df1.set_index('id')

ขั้นตอนที่ 2:ตั้งค่าดัชนีของดาต้าเฟรมที่สอง (df2)

df2.set_index('id')

และสุดท้ายอัปเดต dataframe โดยใช้ตัวอย่างต่อไปนี้ -

df1.update(df2)

0

dataFrame ที่ 1

train.shape

ผลลัพธ์:-

(31962, 3)

dataFrame ที่ 2

test.shape

ผลลัพธ์:-

(17197, 2)

รวมกัน

new_data=train.append(test,ignore_index=True)

ตรวจสอบ

new_data.shape

ผลลัพธ์:-

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