Danh sách gấu trúc Python vào DataFrame

Bất cứ khi nào tôi thực hiện phân tích với gấu trúc, mục tiêu đầu tiên của tôi là đưa dữ liệu vào DataFrame của gấu trúc bằng một trong nhiều tùy chọn có sẵn. Đối với phần lớn các trường hợp, tôi sử dụng

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
0 ,
sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
1 hoặc
sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
2

Tuy nhiên, có những trường hợp tôi chỉ có một vài dòng dữ liệu hoặc một số tính toán mà tôi muốn đưa vào phân tích của mình. Trong những trường hợp này, thật hữu ích khi biết cách tạo DataFrames từ danh sách hoặc từ điển python tiêu chuẩn. Quy trình cơ bản không khó nhưng vì có một số tùy chọn khác nhau nên hiểu cách thức hoạt động của từng tùy chọn sẽ rất hữu ích. Tôi không bao giờ có thể nhớ liệu tôi nên sử dụng

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
3 ,
sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
4 ,
sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
5 hay hàm tạo mặc định ________0____6. Thông thường, thông qua một số lần thử và sai, tôi tìm ra nó. Vì nó vẫn còn khó hiểu đối với tôi, tôi nghĩ rằng tôi sẽ xem qua một số ví dụ bên dưới để làm rõ các cách tiếp cận khác nhau. Ở cuối bài viết, tôi trình bày ngắn gọn cách điều này có thể hữu ích khi tạo báo cáo Excel

Khung dữ liệu từ Cấu trúc Python

Có nhiều phương pháp bạn có thể sử dụng để lấy cấu trúc dữ liệu python tiêu chuẩn và tạo DataFrame gấu trúc. Với mục đích của những ví dụ này, tôi sẽ tạo một DataFrame với thông tin bán hàng trong 3 tháng cho 3 công ty hư cấu

accountJanFebMar0Jones LLC 1502001401Alpha Co2002102152Blue Inc509095

từ điển

Trước khi hiển thị các ví dụ bên dưới, tôi cho rằng các hoạt động nhập sau đây đã được thực hiện

import pandas as pd
from collections import OrderedDict
from datetime import date

Cách "mặc định" để tạo DataFrame từ python là sử dụng danh sách từ điển. Trong trường hợp này, mỗi khóa từ điển được sử dụng cho tiêu đề cột. Chỉ mục mặc định sẽ được tạo tự động

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)

FebJanMaraccount0200150140Jones LLC 1210200215Alpha Co2905095Blue Inc

Như bạn có thể thấy, cách tiếp cận này rất “theo hàng”. Nếu bạn muốn tạo một DataFrame theo cách "cột định hướng", bạn sẽ sử dụng ____0_______3

sales = {'account': ['Jones LLC', 'Alpha Co', 'Blue Inc'],
         'Jan': [150, 200, 50],
         'Feb': [200, 210, 90],
         'Mar': [140, 215, 95]}
df = pd.DataFrame.from_dict(sales)

Sử dụng phương pháp này, bạn nhận được kết quả tương tự như trên. Điểm mấu chốt cần xem xét là phương pháp nào dễ hiểu hơn trong tình huống riêng của bạn. Đôi khi, việc lấy dữ liệu của bạn theo cách tiếp cận theo hàng và các dữ liệu khác theo cách tiếp cận theo cột sẽ dễ dàng hơn. Biết các tùy chọn sẽ giúp làm cho mã của bạn đơn giản và dễ hiểu hơn cho nhu cầu cụ thể của bạn

Hầu hết các bạn sẽ nhận thấy rằng thứ tự của các cột có vẻ sai. Vấn đề là từ điển python tiêu chuẩn không giữ nguyên thứ tự các khóa của nó. Nếu bạn muốn kiểm soát thứ tự cột thì có hai tùy chọn

Trước tiên, bạn có thể sắp xếp lại cột theo cách thủ công

df = df[['account', 'Jan', 'Feb', 'Mar']]

Ngoài ra, bạn có thể tạo từ điển của mình bằng cách sử dụng

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
8 của python

sales = OrderedDict([ ('account', ['Jones LLC', 'Alpha Co', 'Blue Inc']),
          ('Jan', [150, 200, 50]),
          ('Feb',  [200, 210, 90]),
          ('Mar', [140, 215, 95]) ] )
df = pd.DataFrame.from_dict(sales)

Cả hai cách tiếp cận này sẽ cho bạn kết quả theo thứ tự mà bạn có thể mong đợi

accountJanFebMar0Jones LLC 1502001401Alpha Co2002102152Blue Inc509095

Vì những lý do tôi phác thảo bên dưới, tôi có xu hướng sắp xếp lại cụ thể các cột của mình so với. sử dụng OrderedDict nhưng hiểu các tùy chọn luôn là điều tốt

danh sách

Tùy chọn khác để tạo DataFrames của bạn từ python là đưa dữ liệu vào cấu trúc danh sách

Cách tiếp cận đầu tiên là sử dụng cách tiếp cận theo hàng bằng gấu trúc

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
4. Cách tiếp cận này tương tự như cách tiếp cận từ điển nhưng bạn cần gọi rõ ràng các nhãn cột

sales = [('Jones LLC', 150, 200, 50),
         ('Alpha Co', 200, 210, 90),
         ('Blue Inc', 140, 215, 95)]
labels = ['account', 'Jan', 'Feb', 'Mar']
df = pd.DataFrame.from_records(sales, columns=labels)

Phương pháp thứ hai là

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
5 được định hướng theo cột và thực sự trông giống như ví dụ về
sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
8 ở trên

sales = [('account', ['Jones LLC', 'Alpha Co', 'Blue Inc']),
         ('Jan', [150, 200, 50]),
         ('Feb', [200, 210, 90]),
         ('Mar', [140, 215, 95]),
         ]
df = pd.DataFrame.from_items(sales)

Cả hai ví dụ này sẽ tạo DataFrame sau

accountJanFebMar0Jones LLC 1502001401Alpha Co2002102152Blue Inc509095

Giữ nguyên các tùy chọn Thẳng

Để giữ cho các tùy chọn khác nhau rõ ràng trong đầu, tôi đã tập hợp đồ họa đơn giản này để hiển thị từ điển so với. tùy chọn danh sách cũng như hàng so với. phương pháp định hướng cột. Đây là lưới 2X2 nên tôi hy vọng tất cả các chuyên gia tư vấn đều ấn tượng

Danh sách gấu trúc Python vào DataFrame

Để đơn giản, tôi không trình bày cách tiếp cận

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
8 vì cách tiếp cận
sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]
df = pd.DataFrame(sales)
5 có lẽ là một giải pháp trong thế giới thực nhiều khả năng hơn

Nếu nội dung này hơi khó đọc, bạn cũng có thể tải phiên bản PDF .

Ví dụ đơn giản

Điều này có vẻ như cần giải thích nhiều cho một khái niệm đơn giản. Tuy nhiên, tôi thường sử dụng các phương pháp này để xây dựng các Khung dữ liệu nhỏ mà tôi kết hợp với phân tích phức tạp hơn của mình

Ví dụ: giả sử chúng tôi muốn lưu DataFrame của mình và bao gồm một chân trang để chúng tôi biết nó được tạo khi nào và nó được tạo bởi ai. Việc này sẽ dễ thực hiện hơn nhiều nếu chúng ta điền vào một Khung dữ liệu và ghi nó vào Excel so với việc chúng ta cố ghi từng ô riêng lẻ vào Excel

Sử dụng DataFrame hiện tại của chúng tôi

sales = [('account', ['Jones LLC', 'Alpha Co', 'Blue Inc']),
         ('Jan', [150, 200, 50]),
         ('Feb', [200, 210, 90]),
         ('Mar', [140, 215, 95]),
         ]
df = pd.DataFrame.from_items(sales)

Bây giờ hãy tạo chân trang (theo cách định hướng theo cột)

from datetime import date

create_date = "{:%m-%d-%Y}".format(date.today())
created_by = "CM"
footer = [('Created by', [created_by]), ('Created on', [create_date]), ('Version', [1.1])]
df_footer = pd.DataFrame.from_items(footer)

Được tạo bởiCreated onVersion0 CM 09-05-20161. 1

Kết hợp thành một trang tính Excel duy nhất

writer = pd.ExcelWriter('simple-report.xlsx', engine='xlsxwriter')
df.to_excel(writer, index=False)
df_footer.to_excel(writer, startrow=6, index=False)
writer.save()

Danh sách gấu trúc Python vào DataFrame

Nước sốt bí mật ở đây là sử dụng

sales = {'account': ['Jones LLC', 'Alpha Co', 'Blue Inc'],
         'Jan': [150, 200, 50],
         'Feb': [200, 210, 90],
         'Mar': [140, 215, 95]}
df = pd.DataFrame.from_dict(sales)
4 để viết DataFrame chân trang bên dưới DataFrame bán hàng. Ngoài ra còn có một
sales = {'account': ['Jones LLC', 'Alpha Co', 'Blue Inc'],
         'Jan': [150, 200, 50],
         'Feb': [200, 210, 90],
         'Mar': [140, 215, 95]}
df = pd.DataFrame.from_dict(sales)
5 tương ứng để bạn cũng có thể kiểm soát bố cục cột. Điều này cho phép rất linh hoạt với chức năng cơ bản
sales = {'account': ['Jones LLC', 'Alpha Co', 'Blue Inc'],
         'Jan': [150, 200, 50],
         'Feb': [200, 210, 90],
         'Mar': [140, 215, 95]}
df = pd.DataFrame.from_dict(sales)
6

Bản tóm tắt

Hầu hết người dùng pandas nhanh chóng làm quen với việc nhập dữ liệu bảng tính, CSV và SQL . Tuy nhiên, đôi khi bạn sẽ có dữ liệu trong danh sách hoặc từ điển cơ bản và muốn điền vào DataFrame. Pandas cung cấp một số tùy chọn nhưng có thể không phải lúc nào cũng rõ ràng ngay lập tức khi nào nên sử dụng tùy chọn nào.

Không có cách tiếp cận nào là “tốt nhất”, nó thực sự phụ thuộc vào nhu cầu của bạn. Tôi có xu hướng thích các phương pháp dựa trên danh sách vì tôi thường quan tâm đến thứ tự và các danh sách đảm bảo rằng tôi duy trì thứ tự. Điều quan trọng nhất là biết các tùy chọn có sẵn để bạn có thể thông minh khi sử dụng tùy chọn đơn giản nhất cho trường hợp cụ thể của mình