Vì vậy, bạn muốn tạo một danh sách các danh sách ... Chúng ta cần bắt đầu với một danh sách trống
list_of_lists = []
tiếp theo, chúng tôi đọc nội dung tập tin, từng dòng
with open('data') as f:
for line in f:
inner_list = [elt.strip() for elt in line.split(',')]
# in alternative, if you need to use the file content as numbers
# inner_list = [int(elt.strip()) for elt in line.split(',')]
list_of_lists.append(inner_list)
Một trường hợp sử dụng phổ biến là dữ liệu cột, nhưng các đơn vị lưu trữ của chúng tôi là các hàng của tệp, chúng tôi đã đọc từng cái một, vì vậy bạn có thể muốn hoán chuyển
danh sách danh sách của mình. Điều này có thể được thực hiện với thành ngữ sau đây
by_cols = zip(*list_of_lists)
Một cách sử dụng phổ biến khác là đặt tên cho mỗi cột
col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue')
by_names = {}
for i, col_name in enumerate(col_names):
by_names[col_name] = by_cols[i]
để bạn có thể hoạt động trên các mục dữ liệu đồng nhất
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
Hầu hết những gì tôi đã viết có thể được tăng tốc bằng cách sử dụng csv
mô-đun, từ thư viện chuẩn. Một mô-đun bên thứ ba khác là pandas
, cho phép bạn tự động hóa hầu hết các khía cạnh của phân tích dữ liệu điển hình (nhưng có một số phụ thuộc).
Cập nhật Trong khi trong Python 2 zip(*list_of_lists)
trả về một danh sách danh sách (đã chuyển) khác, trong Python 3, tình huống đã thay đổi và zip(*list_of_lists)
trả về một đối tượng zip không thể đăng ký được.
Nếu bạn cần truy cập được lập chỉ mục, bạn có thể sử dụng
by_cols = list(zip(*list_of_lists))
cung cấp cho bạn một danh sách các danh sách trong cả hai phiên bản Python.
Mặt khác, nếu bạn không cần truy cập được lập chỉ mục và điều bạn muốn chỉ là xây dựng một từ điển được lập chỉ mục theo tên cột, một đối tượng zip sẽ ổn ...
file = open('some_data.csv')
names = get_names(next(file))
columns = zip(*((x.strip() for x in line.split(',')) for line in file)))
d = {}
for name, column in zip(names, columns): d[name] = column