ใช้ฟังก์ชันกับแต่ละเซลล์ใน DataFrame


88

ฉันมี dataframe ที่อาจมีลักษณะดังนี้:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

ฉันต้องการดูทุกองค์ประกอบของแต่ละแถว (หรือทุกองค์ประกอบของแต่ละคอลัมน์) และใช้ฟังก์ชันต่อไปนี้เพื่อรับ DF ที่ตามมา:

def foo_bar(x):
    return x.replace('foo', 'wow')

A        B        C
wow      bar      wow bar
bar wow  wow      bar

มีหนึ่งซับง่ายๆที่สามารถใช้ฟังก์ชันกับแต่ละเซลล์ได้หรือไม่?

นี่เป็นตัวอย่างที่เรียบง่ายดังนั้นอาจมีวิธีที่ง่ายกว่าในการดำเนินการตัวอย่างนี้นอกเหนือจากการใช้ฟังก์ชัน แต่สิ่งที่ฉันถามจริงๆคือวิธีการใช้ฟังก์ชันในทุกเซลล์ภายในดาต้าเฟรม


9
ฉันไม่คิดว่าการแก้ไขคำถามให้เป็นคำถามใหม่เป็นความคิดที่ดีเมื่อคุณได้รับคำตอบสำหรับคำถามเก่าแล้วเนื่องจากจะทำให้คำตอบก่อนหน้านี้เป็นโมฆะ ฉันจะขอให้คุณย้อนกลับคำถามเดิมและถามคำถามใหม่แยกกัน
Nickil Maveli

คำตอบ:


125

คุณสามารถใช้applymap()ที่กระชับสำหรับกรณีของคุณ

df.applymap(foo_bar)

#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

อีกทางเลือกหนึ่งคือกำหนดฟังก์ชันของคุณเป็นเวกเตอร์จากนั้นใช้applyวิธีการ:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

สวัสดีขออภัยคำถามเกี่ยวกับการใช้ฟังก์ชันและไม่ได้เกี่ยวกับการหาว่าเซลล์ใดมีค่าเท่ากัน ขอดูว่าจะเปลี่ยนตัวอย่างให้ชัดเจนขึ้นได้
ไหม

1
หากคุณกำลังมองหาการใช้ฟังก์ชันคุณสามารถทำได้import numpy as np; df.apply(np.vectorize(iseven))
Psidom

2
@ eljusticiero67 คุณสามารถใช้ได้df.applymap(iseven)แต่โปรดทราบว่ามันจะช้ามากสำหรับ DataFrames ขนาดใหญ่ดังนั้นเมื่อใดก็ตามที่คุณมีโอกาสให้ใช้เมธอด vectorized
ayhan

@ayhan - วิธีการของคุณดูเหมือนจะใช้ได้ทั้งที่มี np.vectorize และไม่มี คุณช่วยโพสต์คำตอบเพื่อให้ฉันให้เครดิตคุณได้ไหม
eljusticiero67

1
อันที่จริงฉันไม่ได้โพสต์ในตอนแรกเพราะฉันพยายามหารายการที่ซ้ำกันเพื่อเชื่อมโยงสิ่งนี้ ฉันไม่พบรายการที่ซ้ำกัน แต่อาจเป็นรายการนี้ ? Nickil Maveli พูดถูกคุณสามารถอธิบายความหมายได้ แต่อย่างน้อยฉันก็คิดว่าตัวอย่างก็น่าจะเหมือนกัน บางที Psidom สามารถแก้ไขเพื่อรวมคำแนะนำของตัวเองพร้อมกับ applymap ได้?
ayhan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.