Đọc nhiều tệp csv trong Python bằng vòng lặp for

Chọn một trang web để nhận nội dung đã dịch nếu có và xem các sự kiện và ưu đãi tại địa phương. Dựa trên vị trí của bạn, chúng tôi khuyên bạn nên chọn.

Bạn cũng có thể chọn một trang web từ danh sách sau

Làm thế nào để có được hiệu suất trang web tốt nhất

Chọn trang Trung Quốc [bằng tiếng Trung hoặc tiếng Anh] để có hiệu suất trang tốt nhất. Các trang web quốc gia khác của MathWorks không được tối ưu hóa cho các lượt truy cập từ vị trí của bạn

Đôi khi, bạn có thể cần đọc hoặc nhập nhiều tệp CSV từ một thư mục hoặc từ danh sách tệp và chuyển đổi chúng thành DataFrame của gấu trúc. Bạn có thể thực hiện việc này bằng cách đọc từng tệp CSV vào DataFrame và nối thêm hoặc nối các DataFrame để tạo một DataFrame duy nhất có dữ liệu từ tất cả các tệp

Ở đây, tôi sẽ sử dụng read_csv[] để đọc tệp CSV và hàm concat[] để nối các DataFrame lại với nhau để tạo một DataFrame lớn

1. Đọc nhiều tệp CSV từ danh sách

Khi bạn muốn đọc nhiều tệp CSV tồn tại trong các thư mục khác nhau, trước tiên hãy tạo danh sách các chuỗi có đường dẫn tuyệt đối và sử dụng danh sách đó như được hiển thị bên dưới để tải tất cả các tệp CSV và tạo một Khung dữ liệu gấu trúc lớn


# Read CSV files from List
df = pd.concat[map[pd.read_csv, ['d1.csv', 'd2.csv','d3.csv']]]

Lưu ý rằng theo mặc định, phương thức concat[] thực hiện nghĩa hoạt động nối thêm, nó nối thêm từng DataFrame vào cuối một DataFrame khác và tạo một DataFrame duy nhất. Tương tự với SQL union

2. Đọc nhiều tệp CSV từ một thư mục

Thật không may, read_csv[] không hỗ trợ đọc nhiều tệp CSV từ một thư mục vào DataFrame, có thể trong các phiên bản gấu trúc trong tương lai, nó có thể hỗ trợ nó, cho đến lúc đó chúng tôi phải sử dụng giải pháp thay thế để đọc nhiều tệp CSV từ một thư mục và hợp nhất chúng vào DataFrame


# Import libraries
import glob
import pandas as pd

# Get CSV files list from a folder
path = '/apps/data_csv_files
csv_files = glob.glob[path + "/*.csv"]

# Read each CSV file into DataFrame
# This creates a list of dataframes
df_list = [pd.read_csv[file] for file in csv_files]

# Concatenate all DataFrames
big_df   = pd.concat[df_list, ignore_index=True]

Một cách tiếp cận khác sử dụng hàm map[]


df = pd.concat[map[pd.read_csv, glob.glob[path + "/*.csv"]]]

Trong trường hợp bạn muốn sử dụng các tham số tùy chọn của hàm read_csv[], hãy sử dụng nó bằng cách xác định hàm


# By using function
def readcsv[args]:
    return pd.read_csv[args, header=None]

df = pd.concat[map[readcsv, filepaths]]

3. Sử dụng khung dữ liệu Dask

Dask Dataframes triển khai một tập hợp con của API khung dữ liệu Pandas. Nếu tất cả dữ liệu phù hợp với bộ nhớ, bạn có thể chuyển đổi DataFrame thành Pandas DataFrame

Thư viện Dask có thể được sử dụng để đọc khung dữ liệu từ nhiều tệp. Trước khi bạn sử dụng thư viện Dask, trước tiên bạn cần cài đặt nó bằng lệnh pip hoặc bất kỳ phương pháp nào khác


# Using data library
import dask.dataframe as dd
df = dd.read_csv[path + "/*.csv"]

Phần kết luận

Trong bài viết này, bạn đã học được nhiều cách đọc tệp CSV từ một thư mục và tạo một DataFrame lớn. Vì hàm read_csv[] không hỗ trợ đọc nên bạn phải sử dụng cách tải từng CSV vào một DataFrame riêng biệt và kết hợp chúng bằng hàm concat[]

Một cảnh báo chính của Pandas là không có khả năng mở rộng ra nhiều lõi CPU [thường là]. Về cơ bản, khi bạn chạy bất kỳ hoạt động nào, nơi có thể song song hóa lý tưởng, Pandas vẫn sẽ tuân theo cách thực thi lõi đơn truyền thống và các lõi khác sẽ không hoạt động. Điều này đặc biệt liên quan khi bạn đang xây dựng các ứng dụng quy mô lớn

Làm việc với các ứng dụng dựa trên dữ liệu quy mô lớn yêu cầu thực thi nhanh hơn thông qua các thuật toán được tối ưu hóa và loại bỏ/giảm thời gian chạy trong mọi bit có thể có của đường ống. Theo tôi, một lĩnh vực như vậy thường bị bỏ qua là tối ưu hóa các hoạt động đầu vào-đầu ra

Hãy tưởng tượng bạn có 100 tệp CSV mà bạn cần đọc vào môi trường python của mình. Không còn nghi ngờ gì nữa, lựa chọn đầu tiên của bạn sẽ là Pandas. Bên cạnh đó, ngay cả khi bạn không xử lý nhiều tệp CSV, tôi luôn khuyên bạn nên loại bỏ tất cả các tệp CSV và chuyển đổi chúng thành các tệp thay thế tương đối nhanh hơn và tiết kiệm dung lượng hơn như Pickle, Feather hoặc Parquet

Tại sao tôi ngừng kết xuất khung dữ liệu sang CSV và tại sao bạn cũng nên làm như vậy

Đã đến lúc nói lời tạm biệt với pd. to_csv[] và pd. read_csv[]

hướng tới khoa học dữ liệu. com

Nếu ngay cả khi bạn buộc phải sử dụng CSV, cá nhân tôi không bao giờ khuyên bạn nên sử dụng các chức năng đọc và ghi CSV có sẵn trong Pandas, câu trả lời mà bạn có thể tìm thấy trong bài đăng của tôi bên dưới

Đã đến lúc nói lời tạm biệt với pd. read_csv[] và pd. to_csv[]

Thảo luận về một cảnh báo lớn khác của Pandas

hướng tới khoa học dữ liệu. com

Vì vậy, quay lại kịch bản 100 tệp CSV của chúng tôi, ở đây, một cách tiếp cận ngây thơ để đọc nhiều tệp CSV có thể là lặp lại chúng trong một vòng lặp, lấy danh sách các Khung dữ liệu Pandas và nối danh sách thành một Khung dữ liệu duy nhất. Điều này được thể hiện dưới đây

Đoạn mã để đọc nhiều tệp CSV bằng Pandas [Hình ảnh của tác giả]

Tuy nhiên, có một vài vấn đề với cách tiếp cận này

  1. Vòng lặp chắc chắn giới thiệu một quá trình lặp đi lặp lại, tôi. e. , chỉ có thể đọc một tệp CSV cùng một lúc — dẫn đến việc sử dụng tài nguyên dưới mức
  2. Bản thân phương thức read-csv của Pandas là một quá trình tuần tự hóa

Bài đăng này nhằm giải quyết cả hai vấn đề nêu trên liên quan đến Pandas liên quan đến việc đọc nhiều tệp CSV và chúng tôi sẽ khám phá DataTable trong bài đăng này

Datatable là một thư viện python để thao tác dữ liệu dạng bảng. Nó hỗ trợ bộ dữ liệu hết bộ nhớ, xử lý dữ liệu đa luồng và API linh hoạt

Đọc nhiều CSV bằng DataTable [Không lặp lại]

Đoạn mã dưới đây trình bày cách đọc nhiều tệp CSV bằng DataTable

Đoạn mã để đọc nhiều tệp CSV bằng DataTable [Hình ảnh của tác giả]Thiết lập thử nghiệm
  1. Đối với mục đích thử nghiệm, tôi đã tạo mười tệp CSV ngẫu nhiên và khác nhau bằng Python với 0. Mỗi hàng 1 triệu và ba mươi cột — bao gồm các kiểu dữ liệu chuỗi, float và số nguyên
  2. Tôi đã lặp lại thí nghiệm được mô tả bên dưới năm lần để giảm tính ngẫu nhiên và rút ra kết luận hợp lý từ các kết quả quan sát được. Các số liệu tôi báo cáo dưới đây là số liệu trung bình của năm thử nghiệm
  3. Môi trường và thư viện Python
  • Trăn 3. 9. 12
  • gấu trúc 1. 4. 2
  • Dữ liệuBảng 1. 0. 0
Thí nghiệm. Mất thời gian để đọc tất cả các tệp CSV

Biểu đồ bên dưới mô tả thời gian [tính bằng giây] của Pandas và DataTable để đọc mười tệp CSV và tạo một Khung dữ liệu Pandas duy nhất

Biểu đồ thanh mô tả thời gian cần thiết để đọc các tệp CSV của Pandas và DataTable [Hình ảnh của tác giả]
  • Kết quả thử nghiệm cho thấy DataTable có thể tăng tốc hơn hai lần so với Pandas để đọc tệp CSV
  • Ngược lại với Pandas, những kết quả này cũng đóng vai trò là bằng chứng cho cách tiếp cận đa luồng được DataTable áp dụng
Ghi chú kết luận

Thành thật mà nói, tôi không phải là một fan hâm mộ lớn của CSV. Nếu bạn đọc kỹ các bài đăng trước đó của tôi [mà tôi đã liên kết ở trên] và bài đăng bạn đang đọc ngay bây giờ, bạn cũng có thể đồng cảm với tôi. Kể từ khi tôi phát hiện ra nhiều vấn đề liên quan đến CSV, tôi đã ngừng sử dụng chúng nhiều nhất có thể

Để kết luận, tôi muốn nói rằng trừ khi bạn cần xem Khung dữ liệu của mình bên ngoài môi trường không phải python chẳng hạn như Excel, BẠN KHÔNG CẦN CÓ CSV. Thích các định dạng như Parquet, Feather hoặc Pickle để lưu trữ DataFrames của bạn vào. Tuy nhiên, nếu bạn không thấy tùy chọn nào khác, thì ít nhất hãy tối ưu hóa hoạt động đầu vào và đầu ra của bạn bằng cách tận dụng DataTable thay vì Pandas

Làm cách nào để đọc tệp CSV bằng vòng lặp for trong Python?

Bước 1. Để đọc các hàng trong Python, trước tiên, chúng ta cần tải tệp CSV trong một đối tượng. Vì vậy, để tải tệp csv vào một đối tượng, hãy sử dụng phương thức open[]. Bước 2. Tạo đối tượng trình đọc bằng cách chuyển đối tượng tệp đã tạo ở trên cho hàm trình đọc. Bước 3. Sử dụng vòng lặp for trên đối tượng trình đọc để lấy từng hàng .

Làm cách nào để đọc nhiều tệp CSV bằng Python mà không cần gấu trúc?

với open nhận 2 đối số, một là vị trí và tên tệp [còn được gọi là. đường dẫn tệp] và cách bạn muốn mở tệp [“r” để đọc, “w” để ghi]. vì csvfile có nghĩa là bạn sẽ mở tệp và gọi nó là csvfile, sau này được chuyển thành một đối số trong csv. trình đọc [csvfile, dấu phân cách =”,”] trên dòng 4

Làm cách nào để đọc nhiều tệp trong Python bằng gấu trúc?

Sử dụng gói toàn cầu để truy xuất tệp hoặc tên đường dẫn, sau đó lặp qua các đường dẫn tệp bằng vòng lặp for. Tạo một khung dữ liệu về nội dung của từng tệp sau khi đọc nó bằng pd. phương thức read_table[] lấy đường dẫn tệp làm đối số. Nối từng khung dữ liệu vào một khung dữ liệu chính bằng cách sử dụng pd

Chủ Đề