Cách đọc và ghi tệp csv trong python bằng gấu trúc?

Tệp CSV (giá trị được phân tách bằng dấu phẩy) là định dạng tệp phổ biến để truyền và lưu trữ dữ liệu. Khả năng đọc, thao tác và ghi dữ liệu vào và từ các tệp CSV bằng Python là kỹ năng quan trọng cần thành thạo đối với bất kỳ nhà khoa học dữ liệu hoặc phân tích kinh doanh nào. Trong bài đăng này, chúng ta sẽ tìm hiểu về tệp CSV là gì, cách đọc tệp CSV vào Pandas DataFrames và cách ghi DataFrames trở lại tệp CSV phân tích bài đăng

Pandas là gói thao tác dữ liệu phổ biến nhất trong Python và DataFrames là kiểu dữ liệu Pandas để lưu trữ dữ liệu 2D dạng bảng

Mục lục

  1. Tải tệp CSV lên Python Pandas
  2. 1. Phần mở rộng tệp và loại tệp
  3. 2. Biểu diễn dữ liệu trong tệp CSV
    • Dấu phân cách / Dấu phân cách khác – tệp TSV
    • Dấu phân cách trong trường văn bản – Quotechar
  4. 3. Python - Đường dẫn, Thư mục, Tệp
    • Tìm đường dẫn Python của bạn
    • Đang tải tệp. Đường dẫn tuyệt đối và tương đối
  5. 4. Lỗi tải tệp CSV của gấu trúc
  6. Đọc tệp CSV nâng cao
    • Chỉ định kiểu dữ liệu
    • Bỏ qua và chọn hàng và cột từ tệp
    • Biểu tượng giá trị bị thiếu tùy chỉnh
  7. Ưu điểm và nhược điểm của định dạng CSV
  8. Đọc thêm

Tải tệp CSV lên Python Pandas

Quy trình cơ bản để tải dữ liệu từ tệp CSV vào Khung dữ liệu Pandas (tất cả đều ổn) đạt được bằng cách sử dụng chức năng “read_csv” trong Pandas

# Load the Pandas libraries with alias 'pd' 
import pandas as pd 

# Read data from file 'filename.csv' 
# (in the same directory that your python process is based)
# Control delimiters, rows, column names with read_csv (see later) 
data = pd.read_csv("filename.csv") 

# Preview the first 5 lines of the loaded data 
data.head()

Mặc dù mã này có vẻ đơn giản nhưng cần phải hiểu ba khái niệm cơ bản để nắm bắt đầy đủ và gỡ lỗi hoạt động của quy trình tải dữ liệu nếu bạn gặp sự cố

  1. Hiểu phần mở rộng tệp và loại tệp – các chữ cái CSV thực sự có nghĩa là gì? . tệp csv và một. tập tin txt?
  2. Hiểu cách dữ liệu được trình bày bên trong tệp CSV – nếu bạn mở tệp CSV, dữ liệu thực sự trông như thế nào?
  3. Hiểu đường dẫn Python và cách tham chiếu tệp – đường dẫn tuyệt đối và tương đối tới tệp bạn đang tải là gì?
  4. Các định dạng và lỗi dữ liệu CSV – các lỗi phổ biến với chức năng

Mỗi chủ đề này được thảo luận bên dưới và chúng tôi kết thúc hướng dẫn này bằng cách xem xét một số cơ chế tải CSV nâng cao hơn và đưa ra một số ưu điểm và nhược điểm chung của định dạng CSV

1. Phần mở rộng tệp và loại tệp

Bước đầu tiên để làm việc với các tệp có giá trị được phân tách bằng dấu phẩy (CSV) là hiểu khái niệm về loại tệp và phần mở rộng tệp

  1. Dữ liệu được lưu trữ trên máy tính của bạn trong các “tệp” hoặc vùng chứa riêng lẻ, mỗi tệp có một tên khác nhau
  2. Mỗi tệp chứa dữ liệu thuộc các loại khác nhau – phần bên trong của tài liệu Word hoàn toàn khác với phần bên trong của hình ảnh
  3. Máy tính xác định cách đọc tệp bằng cách sử dụng “phần mở rộng tệp”, đó là mã theo sau dấu chấm (“. ”) trong tên tệp
  4. So, a filename is typically in the form “.”. Examples:
    • dự án 1. DOCX – một tệp Microsoft Word có tên Project1
    • shanes_file. TXT – một tệp văn bản đơn giản có tên là shanes_file
    • IMG_5673. JPG – Một tệp hình ảnh có tên IMG_5673
    • Các loại tệp và phần mở rộng nổi tiếng khác bao gồm. XLSX. Excel, PDF. Định dạng Tài liệu Di động, PNG – hình ảnh, ZIP – định dạng tệp nén, GIF – hoạt ảnh, MPEG – video, MP3 – nhạc, v.v. Xem danh sách đầy đủ các tiện ích mở rộng tại đây
  5. Tệp CSV là tệp có “. csv”, phần mở rộng tệp e. g. "dữ liệu. csv”, “siêu_thông tin. csv”. “CSV” trong trường hợp này cho phép máy tính biết rằng dữ liệu chứa trong tệp ở định dạng “giá trị được phân tách bằng dấu phẩy”, mà chúng ta sẽ thảo luận bên dưới

Phần mở rộng tệp được ẩn theo mặc định trên nhiều hệ điều hành. Bước đầu tiên mà bất kỳ kỹ sư, kỹ sư phần mềm hoặc nhà khoa học dữ liệu có lòng tự trọng nào cũng sẽ thực hiện trên máy tính mới là đảm bảo rằng phần mở rộng tệp được hiển thị trong cửa sổ Explorer (Windows) hoặc Finder (Mac) của họ

Cách đọc và ghi tệp csv trong python bằng gấu trúc?
Thư mục có phần mở rộng tệp hiển thị. Trước khi làm việc với các tệp CSV, hãy đảm bảo rằng bạn có thể thấy các phần mở rộng tệp trong hệ điều hành của mình. Các nội dung tệp khác nhau được biểu thị bằng phần mở rộng tệp hoặc các chữ cái sau dấu chấm của tên tệp. e. g. TXT là văn bản, DOCX là Microsoft Word, PNG là hình ảnh, CSV là dữ liệu giá trị được phân tách bằng dấu phẩy

Để kiểm tra xem các phần mở rộng tệp có hiển thị trong hệ thống của bạn hay không, hãy tạo một tài liệu văn bản mới bằng Notepad (Windows) hoặc TextEdit (Mac) và lưu nó vào thư mục bạn chọn. Nếu bạn không thể nhìn thấy “. txt” trong thư mục của bạn khi bạn xem nó, bạn sẽ phải thay đổi cài đặt của mình

  • Trong Microsoft Windows. Mở Bảng điều khiển > Giao diện và cá nhân hóa. Bây giờ, bấm vào Tùy chọn thư mục hoặc Tùy chọn File Explorer, vì nó hiện được gọi là > Xem tab. Trong tab này, bên dưới Cài đặt nâng cao, bạn sẽ thấy tùy chọn Ẩn tiện ích mở rộng cho các loại tệp đã biết. Bỏ chọn tùy chọn này rồi nhấp vào Áp dụng và OK
  • Trong hệ điều hành Mac. Mở Finder > Trong menu, nhấp vào Finder > Preferences, Nhấp vào Advanced, Chọn hộp kiểm “Hiển thị tất cả các phần mở rộng tên tệp”

2. Biểu diễn dữ liệu trong tệp CSV

Tệp “CSV”, tức là tệp có kiểu tệp “csv”, là tệp văn bản cơ bản. Bất kỳ trình soạn thảo văn bản nào, chẳng hạn như NotePad trên windows hoặc TextEdit trên Mac, đều có thể mở tệp CSV và hiển thị nội dung. Sublime Text là một tùy chọn soạn thảo văn bản tuyệt vời và đa chức năng cho mọi nền tảng

CSV là tiêu chuẩn để lưu trữ dữ liệu dạng bảng ở định dạng văn bản, trong đó dấu phẩy được sử dụng để phân tách các cột khác nhau và dòng mới (dấu xuống dòng/nhấn enter) được sử dụng để phân tách các hàng. Thông thường, hàng đầu tiên trong tệp CSV chứa tên của các cột chứa dữ liệu

Và tập dữ liệu bảng ví dụ và dữ liệu định dạng CSV tương ứng được hiển thị trong sơ đồ bên dưới

Cách đọc và ghi tệp csv trong python bằng gấu trúc?
Các tệp giá trị được phân tách bằng dấu phẩy hoặc tệp CSV là các tệp văn bản đơn giản trong đó dấu phẩy và dòng mới được sử dụng để xác định dữ liệu dạng bảng theo cách có cấu trúc

Lưu ý rằng hầu hết mọi dữ liệu dạng bảng đều có thể được lưu trữ ở định dạng CSV – định dạng phổ biến vì tính đơn giản và linh hoạt của nó. Bạn có thể tạo một tệp văn bản trong trình soạn thảo văn bản, lưu nó với một. csv và mở tệp đó trong Excel hoặc Google Trang tính để xem biểu mẫu bảng

Dấu phân cách / Dấu phân cách khác – tệp TSV

Sơ đồ phân tách bằng dấu phẩy cho đến nay là phương pháp phổ biến nhất để lưu trữ dữ liệu dạng bảng trong tệp văn bản

Tuy nhiên, việc lựa chọn ký tự dấu phẩy ',' cho các cột phân cách là tùy ý và có thể được thay thế khi cần thiết. Các lựa chọn thay thế phổ biến bao gồm tab (“\t”) và dấu chấm phẩy (“;”). Các tệp được phân tách bằng tab được gọi là tệp TSV (Giá trị được phân tách bằng tab)

Khi tải dữ liệu bằng Pandas, hàm read_csv được sử dụng để đọc bất kỳ tệp văn bản nào được phân tách và bằng cách thay đổi dấu phân cách bằng tham số sep

Dấu phân cách trong trường văn bản – Quotechar

Một điều phức tạp khi tạo tệp CSV là nếu bạn thực sự có dấu phẩy, dấu chấm phẩy hoặc tab ở một trong các trường văn bản mà bạn muốn lưu trữ. Trong trường hợp này, điều quan trọng là sử dụng "ký tự trích dẫn" trong tệp CSV để tạo các trường này

Ký tự trích dẫn có thể được chỉ định trong Pandas. read_csv sử dụng đối số quotechar. Theo mặc định (như với nhiều hệ thống), nó được đặt làm dấu ngoặc kép chuẩn (“). Mọi dấu phẩy (hoặc dấu phân cách khác như minh họa bên dưới) xuất hiện giữa hai ký tự trích dẫn sẽ bị bỏ qua dưới dạng dấu phân cách cột

Trong ví dụ hiển thị, tệp được phân cách bằng dấu chấm phẩy, có dấu ngoặc kép dưới dạng ký tự trích dẫn được tải vào Pandas và được hiển thị trong Excel. Việc sử dụng ký tự trích dẫn cho phép cột “NickName” chứa dấu chấm phẩy mà không bị chia thành nhiều cột hơn

Cách đọc và ghi tệp csv trong python bằng gấu trúc?
Ngoài dấu phẩy trong tệp CSV, dữ liệu được phân tách bằng tab và dấu chấm phẩy cũng phổ biến. Các ký tự trích dẫn được sử dụng nếu dữ liệu trong một cột có thể chứa ký tự phân cách. Trong trường hợp này, cột 'NickName' chứa các ký tự dấu chấm phẩy và do đó, cột này được "trích dẫn". Chỉ định dấu phân cách và ký tự trích dẫn trong pandas. read_csv

3. Python - Đường dẫn, Thư mục, Tệp

Khi bạn chỉ định tên tệp cho Pandas. read_csv, Python sẽ tìm trong “thư mục làm việc hiện tại” của bạn. Thư mục làm việc của bạn thường là thư mục mà bạn đã bắt đầu quy trình Python hoặc sổ ghi chép Jupyter của mình từ đó

Cách đọc và ghi tệp csv trong python bằng gấu trúc?
Pandas tìm kiếm 'thư mục làm việc hiện tại' của bạn để tìm tên tệp mà bạn chỉ định khi mở hoặc tải tệp. FileNotFoundError có thể do tên tệp sai chính tả hoặc thư mục làm việc không chính xác

Tìm đường dẫn Python của bạn

Đường dẫn Python của bạn có thể được hiển thị bằng cách sử dụng mô-đun os tích hợp. Mô-đun HĐH dành cho chức năng phụ thuộc vào hệ điều hành vào các chương trình và tập lệnh Python

Để tìm thư mục làm việc hiện tại của bạn, chức năng cần thiết là os.getcwd(). Hàm 

# Find out your current working directory
import os
print(os.getcwd())

# Out: /Users/shane/Documents/blog

# Display all of the files found in your current working directory
print(os.listdir(os.getcwd())


# Out: ['test_delimted.ssv', 'CSV Blog.ipynb', 'test_data.csv']
0 có thể được sử dụng để hiển thị tất cả các tệp trong một thư mục, đây là một cách kiểm tra hữu ích để xem liệu tệp CSV bạn đang tải có nằm trong thư mục như mong đợi hay không

# Find out your current working directory
import os
print(os.getcwd())

# Out: /Users/shane/Documents/blog

# Display all of the files found in your current working directory
print(os.listdir(os.getcwd())


# Out: ['test_delimted.ssv', 'CSV Blog.ipynb', 'test_data.csv']

Trong ví dụ trên, thư mục làm việc hiện tại của tôi nằm trong thư mục ‘/Users/Shane/Document/blog’. Bất kỳ tệp nào nằm trong thư mục này sẽ có sẵn ngay lập tức cho hàm open() của tệp Python hoặc hàm Pandas read csv

Thay vì di chuyển các tệp dữ liệu cần thiết vào thư mục làm việc của bạn, bạn cũng có thể thay đổi thư mục làm việc hiện tại của mình thành thư mục chứa các tệp đó bằng cách sử dụng 

# Find out your current working directory
import os
print(os.getcwd())

# Out: /Users/shane/Documents/blog

# Display all of the files found in your current working directory
print(os.listdir(os.getcwd())


# Out: ['test_delimted.ssv', 'CSV Blog.ipynb', 'test_data.csv']
1

Đang tải tệp. Đường dẫn tuyệt đối và tương đối

Khi chỉ định tên tệp cho hàm read_csv, bạn có thể cung cấp cả đường dẫn tệp tuyệt đối hoặc tương đối

  • Đường dẫn tương đối là đường dẫn đến tệp nếu bạn bắt đầu từ thư mục làm việc hiện tại của mình. Trong các đường dẫn tương đối, thông thường, tệp sẽ nằm trong thư mục con của thư mục làm việc và đường dẫn sẽ không bắt đầu bằng trình xác định ổ đĩa, e. g. (dữ liệu/test_file. csv). Các nhân vật '. ’ được sử dụng để di chuyển đến thư mục mẹ trong đường dẫn tương đối
  • Đường dẫn tuyệt đối là đường dẫn đầy đủ từ cơ sở hệ thống tệp của bạn đến tệp bạn muốn tải, e. g. c. /Documents/Shane/data/test_file. csv. Các đường dẫn tuyệt đối sẽ bắt đầu bằng một bộ xác định ổ đĩa (c. / hoặc d. / trong Windows hoặc ‘/’ trong Mac hoặc Linux)

Bạn nên sử dụng các đường dẫn tương đối nếu có thể trong các ứng dụng, vì các đường dẫn tuyệt đối không có khả năng hoạt động trên các máy tính khác nhau do cấu trúc thư mục khác nhau

Cách đọc và ghi tệp csv trong python bằng gấu trúc?
Đang tải cùng một tệp với Pandas read_csv bằng đường dẫn tương đối và tuyệt đối. Đường dẫn tương đối là hướng đến tệp bắt đầu từ thư mục làm việc hiện tại của bạn, trong đó đường dẫn tuyệt đối luôn bắt đầu ở cơ sở của hệ thống tệp của bạn

4. Lỗi tải tệp CSV của gấu trúc

Lỗi phổ biến nhất mà bạn gặp phải khi tải dữ liệu từ tệp CSV vào Pandas sẽ là

  1. # Find out your current working directory
    import os
    print(os.getcwd())
    
    # Out: /Users/shane/Documents/blog
    
    # Display all of the files found in your current working directory
    print(os.listdir(os.getcwd())
    
    
    # Out: ['test_delimted.ssv', 'CSV Blog.ipynb', 'test_data.csv']
    2
    Lỗi Không tìm thấy tệp thường là sự cố với thiết lập đường dẫn, thư mục hiện tại hoặc nhầm lẫn tên tệp (phần mở rộng tệp có thể đóng một phần ở đây. )
  2. # Find out your current working directory
    import os
    print(os.getcwd())
    
    # Out: /Users/shane/Documents/blog
    
    # Display all of the files found in your current working directory
    print(os.listdir(os.getcwd())
    
    
    # Out: ['test_delimted.ssv', 'CSV Blog.ipynb', 'test_data.csv']
    0
    Lỗi giải mã Unicode thường do không chỉ định mã hóa tệp và xảy ra khi bạn có một tệp có các ký tự không chuẩn. Để khắc phục nhanh, hãy thử mở tệp trong Sublime Text và lưu lại bằng mã hóa 'UTF-8'.
  3. # Find out your current working directory
    import os
    print(os.getcwd())
    
    # Out: /Users/shane/Documents/blog
    
    # Display all of the files found in your current working directory
    print(os.listdir(os.getcwd())
    
    
    # Out: ['test_delimted.ssv', 'CSV Blog.ipynb', 'test_data.csv']
    1
    Lỗi phân tích cú pháp có thể xảy ra trong các trường hợp bất thường liên quan đến định dạng dữ liệu của bạn – hãy thử thêm tham số “engine='python'” vào lệnh gọi hàm read_csv; .

Đọc tệp CSV nâng cao

Có một số tham số linh hoạt bổ sung trong hàm Pandas read_csv() hữu ích khi có trong kho kỹ thuật khoa học dữ liệu của bạn

Chỉ định kiểu dữ liệu

Như đã đề cập trước đây, tệp CSV không chứa bất kỳ thông tin loại dữ liệu nào. Các loại dữ liệu được suy ra thông qua việc kiểm tra các hàng trên cùng của tệp, điều này có thể dẫn đến lỗi. Ví dụ, để chỉ định loại dữ liệu cho các cột khác nhau theo cách thủ công, thông số dtype có thể được sử dụng với một từ điển tên cột và loại dữ liệu sẽ được áp dụng, chẳng hạn.

# Find out your current working directory
import os
print(os.getcwd())

# Out: /Users/shane/Documents/blog

# Display all of the files found in your current working directory
print(os.listdir(os.getcwd())


# Out: ['test_delimted.ssv', 'CSV Blog.ipynb', 'test_data.csv']
2

Lưu ý rằng đối với ngày và giờ, định dạng, cột và hành vi khác có thể được điều chỉnh bằng cách sử dụng các tham số parse_dates, date_parser, dayfirst, keep_date

Bỏ qua và chọn hàng và cột từ tệp

Tham số nrows chỉ định số lượng hàng từ đầu tệp CSV cần đọc, điều này rất hữu ích khi lấy mẫu của một tệp lớn mà không cần tải hoàn toàn. Tương tự, tham số skiprows cho phép bạn chỉ định các hàng cần loại bỏ, ở đầu tệp (cung cấp một số nguyên) hoặc trong toàn bộ tệp (cung cấp danh sách các chỉ số hàng). Tương tự, tham số usecols có thể được sử dụng để chỉ định cột nào trong dữ liệu sẽ tải

Biểu tượng giá trị bị thiếu tùy chỉnh

Khi dữ liệu được xuất sang CSV từ các hệ thống khác nhau, các giá trị bị thiếu có thể được chỉ định bằng các mã thông báo khác nhau. Thông số na_values ​​cho phép bạn tùy chỉnh các ký tự được nhận dạng là giá trị bị thiếu. Các giá trị mặc định được hiểu là NA/NaN là. ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1. #IND', '-1. #QNAN’, ‘-NaN’, ‘-nan’, ‘1. #IND', '1. #QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’

# Advanced CSV loading example

data = pd.read_csv(
    "data/files/complex_data_example.tsv",      # relative python path to subdirectory
    sep='\t' 					# Tab-separated value file.
    quotechar="'",				# single quote allowed as quote character
    dtype={"salary": int}, 		        # Parse the salary column as an integer 
    usecols=['name', 'birth_date', 'salary'].   # Only load the three columns specified.
    parse_dates=['birth_date'], 		# Intepret the birth_date column as a date
    skiprows=10, 				# Skip the first 10 rows of the file
    na_values=['.', '??'] 			# Take any '.' or '??' values as NA
)

Ưu điểm và nhược điểm của định dạng CSV

Như với tất cả các quyết định kỹ thuật, việc lưu trữ dữ liệu của bạn ở định dạng CSV có cả ưu điểm và nhược điểm. Hãy nhận biết những cạm bẫy và sự cố tiềm ẩn mà bạn sẽ gặp phải khi tải, lưu trữ và trao đổi dữ liệu ở định dạng CSV

Về mặt tích cực

  • Định dạng CSV là phổ biến và dữ liệu có thể được tải bởi hầu hết mọi phần mềm
  • Các tệp CSV rất dễ hiểu và gỡ lỗi bằng trình soạn thảo văn bản cơ bản
  • Các tệp CSV nhanh chóng được tạo và tải vào bộ nhớ trước khi phân tích

Tuy nhiên, định dạng CSV có một số mặt tiêu cực

  • Không có thông tin loại dữ liệu nào được lưu trữ trong tệp văn bản, tất cả việc nhập (ngày, int so với float, chuỗi) chỉ được suy ra từ dữ liệu
  • Không có thông tin định dạng hoặc bố cục nào có thể lưu trữ được - những thứ như phông chữ, đường viền, cài đặt độ rộng cột từ Microsoft Excel sẽ bị mất
  • Mã hóa tệp có thể trở thành vấn đề nếu có các ký tự không tương thích với ASCII trong trường văn bản
  • Định dạng CSV không hiệu quả; . Tuy nhiên, bạn sẽ thấy rằng dữ liệu CSV của mình nén tốt bằng nén zip

Bên cạnh đó, trong nỗ lực khắc phục một số nhược điểm này, hai nhà phát triển khoa học dữ liệu nổi tiếng trong cả hệ sinh thái R và Python, Wes McKinney và Hadley Wickham, gần đây đã giới thiệu Định dạng Feather, nhằm mục đích trở thành một định dạng nhanh, đơn giản, mở,

Làm thế nào bạn có thể đọc và ghi dữ liệu từ. Tệp CSV bằng Python?

Các bước để đọc tệp CSV. .
Nhập thư viện csv. nhập csv
Mở tệp CSV. Các. .
Sử dụng tệp csv. đối tượng reader để đọc tệp CSV. csvreader = csv. người đọc (tập tin)
Trích xuất tên trường. Tạo một danh sách trống gọi là tiêu đề. .
Trích xuất các hàng/bản ghi. .
Đóng tệp

Bạn có thể đọc và ghi vào tệp CSV cùng lúc với Python không?

Bạn có thể làm open("data. csv", "rw") , điều này cho phép bạn đọc và viết cùng một lúc.