คอลัมน์ดาต้าเฟรมของ python pandas แปลงเป็นคีย์และค่า dict


94

ฉันมีกรอบข้อมูลแพนด้าที่มีหลายคอลัมน์และฉันต้องการสร้าง dict จากสองคอลัมน์: อันหนึ่งเป็นคีย์ของ dict และอีกอันเป็นค่าของ dict ฉันจะทำเช่นนั้นได้อย่างไร?

ดาต้าเฟรม:

           area  count
co tp
DE Lake      10      7
Forest       20      5
FR Lake      30      2
Forest       40      3

ฉันต้องการกำหนดพื้นที่เป็นคีย์นับเป็นค่าในคำสั่ง ขอบคุณล่วงหน้า.

คำตอบ:


217

หากlakesเป็นของDataFrameคุณคุณสามารถทำสิ่งต่างๆเช่น

area_dict = dict(zip(lakes.area, lakes.count))

1
ในเวอร์ชัน 0.17.1 ได้รับข้อผิดพลาด:TypeError: zip argument #2 must support iteration
jezrael

20
วิธีแก้ไข:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael

1
คำตอบอื่น ๆ ที่คำถามนี้stackoverflow.com/questions/18695605/…
Ben Fulton

1
จะเกิดอะไรขึ้นถ้าคุณต้องการให้คอลัมน์มากกว่าหนึ่งคอลัมน์เป็นค่าพจนานุกรม? area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column)))ผมคิดว่าสิ่งที่ต้องการ คุณจะทำให้สิ่งนี้เกิดขึ้นได้อย่างไร?
Jesse Marks

2
หากอาร์กิวเมนต์ที่สองมีหลายค่าจะใช้ไม่ได้
pnv

10

ด้วยแพนด้าสามารถทำได้ดังนี้:

หากทะเลสาบเป็น DataFrame ของคุณ:

area_dict = lakes.to_dict('records')

1
ไม่มีคอลัมน์ "บันทึก" ในตัวอย่างที่กำหนด นอกจากนี้ในกรณีนี้ดัชนีจะเป็นกุญแจสำคัญซึ่งไม่ใช่สิ่งที่เราต้องการ
Michael D

11
@MichaelD 'records' ไม่ใช่คอลัมน์ orientมันเป็นตัวเลือกสำหรับการโต้แย้งได้
Zheng Liu

2

คุณสามารถทำได้เช่นกันหากคุณต้องการเล่นกับหมีแพนด้า อย่างไรก็ตามฉันชอบวิธีของ punchagan

# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.