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
- Tải tệp CSV lên Python Pandas
- 1. Phần mở rộng tệp và loại tệp
- 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
- 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
- 4. Lỗi tải tệp CSV của gấu trúc
- Đọ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
- Ưu điểm và nhược điểm của định dạng CSV
- Đọ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 và gỡ lỗi đầy đủ hoạt động của quy trình tải dữ liệu nếu bạn gặp sự cố
- 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?
- 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?
- 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ì?
- 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
- 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
- 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
- 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
- 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
- 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ọ
Để 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 một 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
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
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ừ đó
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ở của hệ thống tệp đế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
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à
# 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. ]# 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'.# 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
- Tệp CSV được tạo và tải nhanh chóng 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
Ngoài ra, 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ở,