Python csv thay thế hàng
Thư viện pandas và csv là những mô-đun phổ biến nhất để xử lý dữ liệu CSV. Bài viết này sẽ thảo luận về cách sử dụng các thư viện này để cập nhật tệp CSV Show Chúng ta sẽ xem cách chỉnh sửa tệp CSV bằng cách chèn một hàng, cập nhật một (hoặc nhiều hàng) dựa trên (các) giá trị cột hoặc xóa một (hoặc nhiều hàng) dựa trên các giá trị của một cột đã cho. Chúng ta cũng sẽ xem cách chèn một cột vào tệp CSV Các ví dụ hiển thị trong bài viết này sẽ sử dụng tệp CSV có tên “employees. csv” với nội dung như sau
Tệp có sáu cột và năm hàng và được lưu trong cùng thư mục với tập lệnh chứa mã của chúng tôi Ghi chú. Mỗi đoạn mã được hiển thị sẽ bắt đầu bằng “nhân viên. csv” chứa nội dung trên Chèn một hàng vào tệp CSVTrong thư viện csv, chúng ta có thể dễ dàng ghi một hàng vào tệp CSV bằng csv. đối tượng nhà văn (). Trong trường hợp này, chúng ta cần biết các cột trên dữ liệu gốc và thứ tự của chúng 1 2 3 4 5 6 7 8 9 10 11 12 13 # Nhập thư viện csv nhập csv
# Mở “nhân viên. csv" ở chế độ chắp thêm ("a") # Nó có nghĩa là dòng sẽ được thêm vào sẽ đi đến hàng cuối cùng với mở("nhân viên. csv", "a") as infile: # Tạo đối tượng người viết cho csv người viết = csv. người viết(infile) # Dữ liệu chúng tôi muốn ghi vào tệp CSV dòng = [2008, "Procurement officer",6100,"2/8/2011","CA"] # Ghi hàng vào tệp CSV. # Lưu ý rằng dòng này cập nhật tệp tại chỗ nhà văn. nhà văn(dòng) Đầu ra (nội dung của nhân viên. csv sau khi cập nhật) ID,Position,Salary,Joining Date,Grade 2001,Junior web developer,5600,8/27/2020,AB 2006,Accountant,7200,7/22/2019,BA 3014,Senior Data Scientist,7800,5/1/2013,AA 1946,HR Manager,6200,9/9/2021,DB 1947,HR Manager 3,6250,1/3/2016,DC 2008,Procurement officer,6100,2/8/2011,CA Đoạn mã trên mở tệp CSV ở chế độ nối thêm (“a”). Điều đó có nghĩa là hàng chúng tôi đang viết được thêm vào làm hàng cuối cùng Ngoài ra, bạn có thể sử dụng gấu trúc để thêm hàng vào tệp CSV. Có hai cách để làm điều đó
Phương thức đầu tiên hoạt động như open() và csv. nhà văn () trong ví dụ trước Chúng tôi cần mở tệp CSV ở chế độ nối thêm và cập nhật nó bằng một Khung dữ liệu mới chứa (các) hàng mà chúng tôi muốn thêm. Đây là một ví dụ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 nhập gấu trúc dưới dạng pd
# Dòng chúng tôi muốn thêm vào tệp CSV dòng = [[1901, "Procurement officer 2",6100,"12/8/2010","CA"], [1902, "HR",5700,"12/8/2010","DA"]]
# Tạo DataFrame mới với dữ liệu mới mà chúng tôi muốn thêm vào tệp CSV # Lưu ý rằng chúng ta cần chuyển các danh sách khớp với các cột của tệp CSV # Ngoài ra, chúng tôi có thể tải tệp CSV dưới dạng df và sử dụng các cột dưới dạng cột = df. cột, nghĩa là # df = pd. read_csv("nhân viên. csv") # in(df. cột) df_new_data = pd. Khung dữ liệu(dòng, cột = ["ID","Position" ,"Salary" ,"Joining Date", "Grade"]) in(df_new_data)
# nhân viên mở. csv ở chế độ chắp thêm ("a") và nối thêm DataFrame với dữ liệu mới # vào tệp CSV. Điều này sẽ thay thế tệp CSV bằng phiên bản cập nhật df_new_data. to_csv('employees. csv', chế độ='a', header=False, index=False) đầu ra ID,Position,Salary,Joining Date,Grade 2001,Junior web developer,5600,8/27/2020,AB 2006,Accountant,7200,7/22/2019,BA 3014,Senior Data Scientist,7800,5/1/2013,AA 1946,HR Manager,6200,9/9/2021,DB 1947,HR Manager 3,6250,1/3/2016,DC 1901,Procurement officer 2,6100,12/8/2010,CA 1902,HR,5700,12/8/2010,DA Trong phương pháp thứ hai, điều cần thiết là phải nắm được khái niệm lập chỉ mục một cách chính xác—hàm pandas. Khung dữ liệu. loc sử dụng chỉ mục để xác định vị trí của hàng mới. Nếu nhãn chỉ mục không tồn tại, nó sẽ được tạo; 1 2 3 4 5 6 7 8 9 10 df = pd. read_csv("employees. csv", index_col="ID")
# Thêm hàng tại một chỉ mục (ID) nhất định df. loc[1963] = ["Operations Manager",17000,"10/3/2007", "AS"]
# Bỏ chỉ mục "ID" df = df. reset_index()
# Ghi DataFrame cập nhật vào nhân viên. csv df. to_csv('employees. csv', chỉ mục=Sai) đầu ra ID,Position,Salary,Joining Date,Grade 2001,Junior web developer,5600,8/27/2020,AB 2006,Accountant,7200,7/22/2019,BA 3014,Senior Data Scientist,7800,5/1/2013,AA 1946,HR Manager,6200,9/9/2021,DB 1947,HR Manager 3,6250,1/3/2016,DC 1963,Operations Manager,17000,10/3/2007,AS Chỉnh sửa một hàng dựa trên các điều kiệnPhần này thảo luận về cách cập nhật một hàng nhất định dựa trên các giá trị cột. Giả sử chúng tôi muốn cập nhật hàng có ID=1947 bằng cách sử dụng mô-đun csv. Chúng ta cần đọc từng hàng của tệp, cập nhật hàng phù hợp với điều kiện (ID=1947) và ghi các thay đổi vào cùng một tệp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 từ tệp tạm thời nhập Tệp được đặt tên nhập đóng nhập csv
# Tạo một tệp tạm thời ở chế độ ghi ("w") để giữ các giá trị mới tempfile = Tệp tạm thời được đặt tên(chế độ="w", delete=False) # Các trường là các cột cho tệp CSV mà chúng tôi muốn cập nhật trường = ["ID", "Position", "Salary", "Joining Date", "Grade"] # Mở tệp CSV ở chế độ đọc ("r") # Chúng tôi sẽ ghi vào tệp tạm thời trước
với mở("nhân viên. csv", "r") như csvfile, tempfile: # Tạo đối tượng người đọc và người viết bằng thư viện csv. trình đọc = csv. DictReader(csvfile, tên trường=fields) người viết = csv. DictWriter(tempfile, tên trường=fields) # Lặp lại các hàng của tệp CSV dành cho hàng trong người đọc: # Dựa trên giá trị của cột "ID", hãy tạo các chỉnh sửa trên tệp tạm thời nếu hàng["ID"] == str(1947): in("Đang cập nhật hàng có ID=", row["ID"]) # Dữ liệu mới new_data = ["Giám đốc điều hành", 22000, "9/24/2009"] # Cập nhật dữ liệu từ điển bằng dữ liệu mới, new_data. hàng["Vị trí"], row["Salary"], row["Joining Date"] = new_data # tạo một hàng dữ liệu hoàn chỉnh để ghi vào tệp tạm thời hàng = { "ID". hàng["ID"], "Vị trí". hàng["Vị trí"], "Lương". hàng["Lương"], "Ngày tham gia". hàng["Ngày tham gia"], } # ghi hàng có dữ liệu mới nhà văn. nhà văn(hàng) # Di chuyển tệp tạm thời sang tệp CSV gốc. Điều này thay thế nhân viên. csv
đóng cửa. di chuyển(tempfile. tên, "nhân viên. csv") Đầu ra (thiết bị xuất chuẩn và tệp CSV được cập nhật) Updating row with ID= 1947 ID,Position,Salary,Joining Date, 2001,Junior web developer,5600,8/27/2020, 2006,Accountant,7200,7/22/2019, 3014,Senior Data Scientist,7800,5/1/2013, 1946,HR Manager,6200,9/9/2021, 1947,Manging Director,22000,9/24/2009, Và nếu bạn muốn cập nhật một ô bằng pandas, thì pandas. Khung dữ liệu. chỉ nên đủ. Đây là một ví dụ 1 2 3 4 5 6 7 8 9 10 11 12 13 nhập gấu trúc dưới dạng pd
# Đọc tệp CSV và đặt chỉ mục thành cột "ID" df = pd. read_csv("employees. csv", index_col="ID")
# cập nhật một ô dựa trên chỉ mục (ID) và cột df. tại[2006, '] = 'Senior Accountant'
# Đặt lại chỉ mục thành 0,1,2, df = df. reset_index()
# ghi các thay đổi vào tệp df. to_csv("nhân viên. csv", chỉ mục=Sai) đầu ra ID,Position,Salary,Joining Date,Grade 2001,Junior web developer,5600,8/27/2020,AB 2006,Senior Accountant,7200,7/22/2019,BA 3014,Senior Data Scientist,7800,5/1/2013,AA 1946,HR Manager,6200,9/9/2021,DB 1947,HR Manager 3,6250,1/3/2016,DC Xóa một hàng trong tệp CSV bằng gấu trúcChúng tôi có thể xóa một hàng trong pandas bằng cách lọc DataFrame dựa trên một số điều kiện. Chúng tôi cần tải tệp CSV vào DataFrame của gấu trúc, áp dụng các bộ lọc và sau đó lưu DataFrame kết quả trở lại tệp CSV. Trong ví dụ sau, chúng tôi chỉ muốn giữ các hàng có ID=1946 hoặc 2001 và loại bỏ phần còn lại 1 2 3 4 5 6 7 8 9 10 11 nhập gấu trúc dưới dạng pd
df = pd. read_csv('employees. csv')
# chọn các hàng có ID=1946 hoặc 2001 df = df[df.ID. isin([1946, 2001])]
# nếu bạn muốn làm ngược lại, thì hãy sử dụng toán tử phủ định (~), nghĩa là, # df[~df. TÔI. isin([1946, 2001])] # Ghi DataFrame cập nhật vào nhân viên. csv' df. to_csv('employees. csv', chỉ mục=Sai) Output: ID,Position,Salary,Joining Date,Grade 2001,Junior web developer,5600,8/27/2020,AB 1946,HR Manager,6200,9/9/2021,DB Thay thế giá trị ô trong CSVgấu trúc. Khung dữ liệu. hàm replace() được sử dụng để thay thế các giá trị ô. Ví dụ dưới đây cho thấy cách thay thế hai giá trị 1 2 3 4 5 6 7 8 9 10 11 12 nhập gấu trúc dưới dạng pd
# Đọc tệp CSV df = pd. read_csv("employees. csv") # Thay thế mọi lần xuất hiện của " HR Manager " bằng Human Resource Manager và "Junior web developer" bằng Web Developer # Lưu ý rằng điều này hoạt động ở cấp độ ô. Ví dụ: một ô có "Quản lý nhân sự 3" sẽ không # được thay thế. Các ô chỉ có " HR Manager " được thay thế df = df. thay thế({"Trưởng phòng Nhân sự":"Quản lý nhân sự", "Nhà phát triển web mới thành lập". "Nhà phát triển web"}) # Bạn có thể thay thế các giá trị trên một cột bằng cú pháp này # df[cột] = df[cột]. thay thế(. ) # Viết kết quả vào tệp CSV df. to_csv("nhân viên. csv", chỉ mục=Sai) đầu ra ID,Position,Salary,Joining Date,Grade 2001,Web Developer,5600,8/27/2020,AB 2006,Accountant,7200,7/22/2019,BA 3014,Senior Data Scientist,7800,5/1/2013,AA 1946,Human Resource Manager,6200,9/9/2021,DB 1947,HR Manager 3,6250,1/3/2016,DC Như đã đề cập ở trên, hàm replace() thay thế các giá trị ô chứ không phải chuỗi con của các giá trị ô. Đó là lý do tại sao giá trị ô “Quản lý nhân sự” được thay thế, nhưng chuỗi con “Quản lý nhân sự 3” ở hàng cuối cùng thì không Chèn cột dựa trên (các) điều kiệnTrong trường hợp này, chúng tôi muốn tạo một cột mới với các giá trị được lấy dựa trên các giá trị của cột khác. Cụ thể, chúng tôi muốn tạo một cột có tên “Above7000” có giá trị “Có” nếu Mức lương>7000 và “Không” nếu ngược lại. Chúng tôi sử dụng NumPy để tận dụng việc vector hóa thuộc tính tính toán 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 nhập gấu trúc dưới dạng pd nhập numpy as np
df = pd. read_csv("employees. csv")
#Nêu điều kiện điều kiện = [df["Salary"]>7000, df["Salary"]<=7000]
# Đầu ra để sử dụng cho các điều kiện -one-to-one đầu ra = ["Có", "No"]
# Sử dụng np. chọn để tạo một cột mới dựa trên các điều kiện đã nêu # Nếu không có điều kiện nào được thỏa mãn, giá trị mặc định của "DDD" sẽ được sử dụng df['Above_7000'] = pd.Sê-ri(np. chọn(điều kiện, đầu ra, default='DDD')) df. to_csv("nhân viên. csv", chỉ mục=Sai) đầu ra ________số 8_______các numpy. select(điều kiện, danh sách lựa chọn, default=default_value) trả về một mảng được rút ra từ các phần tử trong danh sách lựa chọn, tùy thuộc vào điều kiện. Nếu không có điều kiện nào được đáp ứng, hàm trả về default_value đã cho, nếu không thì 0 Phần kết luậnBài viết này đã thảo luận về các cách khác nhau để cập nhật tệp CSV bằng cách sử dụng mô-đun csv và pandas Trong hầu hết các trường hợp, chúng tôi phải tải tệp CSV gốc, thực hiện cập nhật và ghi dữ liệu đã cập nhật vào tệp. Khi xử lý tệp CSV có một vài hàng, hầu hết các phương pháp được thảo luận ở đây đều đủ nhanh, nhưng khi tệp CSV phát triển, một số phương pháp trở nên chậm |