Các cột trong khung dữ liệu của pandas python chuyển đổi thành khóa và giá trị dict


94

Tôi có một khung dữ liệu gấu trúc với nhiều cột và tôi muốn tạo một dict từ hai cột: một là khóa của dict và cột kia là giá trị của dict. Làm thế nào tôi có thể làm điều đó?

Khung dữ liệu:

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

Tôi cần xác định khu vực làm khóa, đếm dưới dạng giá trị trong dict. Cảm ơn bạn trước.

Câu trả lời:


217

Nếu lakeslà của bạn DataFrame, bạn có thể làm điều gì đó như

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

1
Trong phiên bản 0.17.1 nhận được lỗi:TypeError: zip argument #2 must support iteration
jezrael

20
Giải pháp:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael

1
Các câu trả lời khác cho câu hỏi này stackoverflow.com/questions/18695605/…
Ben Fulton,

1
Điều gì sẽ xảy ra nếu bạn muốn nhiều hơn một cột là giá trị trong từ điển? Tôi đang nghĩ một cái gì đó như thế này area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). Làm thế nào bạn sẽ làm cho điều này xảy ra?
Jesse Marks

2
Nếu đối số thứ hai có nhiều giá trị, điều này sẽ không hoạt động.
pnv

10

Với gấu trúc, nó có thể được thực hiện như:

Nếu hồ là DataFrame của bạn:

area_dict = lakes.to_dict('records')

1
không có cột 'bản ghi' trong ví dụ nhất định. Cũng trong trường hợp đó, chỉ mục sẽ là chìa khóa, không phải những gì chúng ta muốn.
Michael D

11
@MichaelD 'bản ghi' không phải là một cột. Đó là một lựa chọn cho đối số orient.
Zheng Liu

2

Bạn cũng có thể làm điều này nếu bạn muốn chơi với gấu trúc. Tuy nhiên, tôi thích cách của 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}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.