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

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

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

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 CSV

Trong 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 đó

  • Mở tệp CSV ở chế độ chắp thêm, sau đó cập nhật tệp hoặc,
  • Sử dụng gấu trúc. Khung dữ liệu. chức năng định vị [ ]

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ện

Phầ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

Không nên đọc và ghi lại bản cập nhật vào cùng một tệp đã mở. Thay vào đó, cách tốt nhất là ghi bản cập nhật vào tệp tạm thời và sử dụng nội dung của tệp này để cập nhật tệp gốc sau khi cập nhật hoàn tất. đây là một ví dụ tốt

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úc

Chú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 CSV

gấ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ện

Trong 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ận

Bà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