Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Làm việc với file CSV trong lập trình Python

File CSV (comma separated values) là một trong những file phẳng phổ biến nhất để lưu trữ và chia sẻ dữ liệu cross-platform. Các cột được phân cách bằng dấu phẩy và có hàng tiêu đề tùy chọn chỉ tên cột. Python có thể đọc file CSV bằng nhiều module. Trong bài viết này, xem cách thư viện CSV trong Python dùng để đọc và ghi file CSV. Cũng xem thư viện pandas để đọc file CSV.

Đọc file CSV dùng module csv

Có thể lấy file CSV từ (https://www.guru99.com/python-csv.html)

Ví dụ

import csv
with open('C:\\iris.csv', 'rt') as file:
    csv_rows = csv.reader(file)
    for row in csv_rows:
        print(row)

Kết quả

Chạy đoạn code trên cho kết quả sau:

['sepal.length', 'sepal.width', 'petal.length', 'petal.width', 'variety']
['5.1', '3.5', '1.4', '.2', 'Setosa']
['4.9', '3', '1.4', '.2', 'Setosa']
['4.7', '3.2', '1.3', '.2', 'Setosa']
['4.6', '3.1', '1.5', '.2', 'Setosa']
['5', '3.6', '1.4', '.2', 'Setosa']
['5.4', '3.9', '1.7', '.4', 'Setosa']
['4.6', '3.4', '1.4', '.3', 'Setosa']
............

Đọc file CSV dùng Pandas

Thư viện Pandas cũng có thể đọc file CSV. Nó có phương thức read_csv áp dụng trực tiếp truyền đường dẫn và tên file. Sau khi đọc, nó thành dataset và ta có thể in các phần khác nhau của dataset theo yêu cầu.

Ví dụ

import pandas as pd
datainput = pd.read_csv('C:\\iris.csv')
print("Giá trị dataset cho trước : \n", datainput)
# Kích thước dataset
print("\nKích thước dataset là :\n", datainput.shape)
# In vài hàng từ dataset
print("\n In vài hàng từ dataset :\n", datainput[0:6])

Kết quả

Chạy đoạn code trên cho kết quả sau:

Given dataset values :
   sepal.length  sepal.width  petal.length  petal.width variety
0            5.1          3.5           1.4          0.2  Setosa
1            4.9          3.0           1.4          0.2  Setosa
2            4.7          3.2           1.3          0.2  Setosa
3            4.6          3.1           1.5          0.2  Setosa
4            5.0          3.6           1.4          0.2  Setosa
...
The size of the dataset is : (150, 5)
printing few rows from the dataset :
   sepal.length  sepal.width  petal.length  petal.width variety
0            5.1          3.5           1.4          0.2  Setosa
1            4.9          3.0           1.4          0.2  Setosa
2            4.7          3.2           1.3          0.2  Setosa
3            4.6          3.1           1.5          0.2  Setosa
4            5.0          3.6           1.4          0.2  Setosa
5            5.4          3.9           1.7          0.4  Setosa

Ghi file CSV dùng module csv

Để tạo file CSV, dùng list Python. Khai báo dataset chứa mỗi hàng là list và tất cả hàng là sublist trong một list lớn. Cũng tạo dataset khác chỉ đại diện cho hàng tiêu đề. Sau đó dùng các phương thức như writerow() và csv.writer để ghi file ra hệ thống cục bộ.

Ví dụ

import csv
data = ["Month", "1958", "1959", "1960"]
x = [
    ["JAN", 340, 360, 417],
    ["FEB", 318, 342, 391],
    ["MAR", 362, 406, 419],
    ["APR", 348, 396, 461],
    ["MAY", 363, 420, 472],
    ["JUN", 435, 472, 535],
    ["JUL", 491, 548, 622],
    ["AUG", 505, 559, 606],
    ["SEP", 404, 463, 508],
    ["OCT", 359, 407, 461],
    ["NOV", 310, 362, 390],
    ["DEC", 337, 405, 432],
]
y = "C:\\years.csv"
with open(y, 'w') as work:
    z = csv.writer(work)
    z.writerow(data)
    z.writerows(x)

Kết quả

Chạy đoạn code trên cho kết quả sau:

Month,1958,1959,1960
JAN,340,360,417
FEB,318,342,391
MAR,362,406,419
APR,348,396,461
MAY,363,420,472
JUN,435,472,535
JUL,491,548,622
AUG,505,559,606
SEP,404,463,508
OCT,359,407,461
NOV,310,362,390
DEC,337,405,432

Ghi file CSV dùng pandas

Dùng pandas, tạo DataFrame chứa hàng và tiêu đề hàng. Sau đó dùng to_csv với tham số tên file và đường dẫn để ghi dữ liệu ra file CSV.

Ví dụ

from pandas import DataFrame
C = {'Month': ['JAN', 'FEB', 'MAR'],
     '1958': ['345', '435', '545'],
     '1959': ['377', '135', '985'],
     '1960': ['498', '354', '765']}
df = DataFrame(C, columns=["Month", "1958", "1959", "1960"])
export_csv = df.to_csv(r'C:\years_p.csv', index=None, header=True)
print(df)

Kết quả

Chạy đoạn code trên cho kết quả sau:

  Month 1958 1959 1960
0  JAN  345  377  498
1  FEB  435  135  354
2  MAR  545  985  765