Pandas là một trong những thư viện thao tác và phân tích dữ liệu phổ biến nhất trong hệ sinh thái khoa học dữ liệu. Nó là như vậy vì một vài lý do
Một trong những lý do là Pandas cho phép thực hiện các thao tác phức tạp một cách đơn giản và trực quan. Bạn có thể đạt được nhiều hơn những gì bạn mong đợi trong một dòng mã Pandas
Trong bài viết này, chúng ta sẽ xem qua 4 thao tác thao tác dữ liệu thoạt nghe có vẻ hơi phức tạp. Sau khi chúng tôi hoàn thành, bạn sẽ ngạc nhiên về mức độ đơn giản của việc hoàn thành chúng với Pandas
Vì các bộ dữ liệu thực tế có thể khá lộn xộn, thao tác hoặc làm sạch dữ liệu là một phần chính của quy trình khoa học dữ liệu
Tôi đã chuẩn bị một bộ dữ liệu mẫu thể hiện một số vấn đề mà chúng tôi có thể gặp phải trong các bộ dữ liệu thực tế
Ghi chú. Câu chuyện này ban đầu được xuất bản trên datasciencehowto. com
Tôi cũng sẽ chia sẻ mã tạo khung dữ liệu trong trường hợp bạn muốn tự mình thực hành
df = pd.DataFrame[{ "last_date": ["2021-03-14", "2021-01-13",
"2021-09-15", "2021-01-01",
"2020-12-10","2021-04-02"], "price": ["$950.0", "$450.5", "$1,100.5",
"$360.0", "$850.0", "$440.5"], "duration": ["2 days", "1 week", "5 days",
"1 month", "10 days", "2 weeks"], "amenities": ["tv, dishwasher", "TV, washer",
"dishwasher, washer", "washer",
"tv", "dishwasher"]
}]df
df [hình ảnh của tác giả]
Các giá trị thuộc các loại khác nhau như ngày, số, văn bản và danh sách. Tuy nhiên, chúng được lưu trữ với kiểu dữ liệu đối tượng
df.dtypeslast_date object
price object
duration object
amenities object
dtype: object
Chúng ta phải luôn lưu trữ dữ liệu với kiểu dữ liệu phù hợp. Nếu không, chúng tôi sẽ không thể sử dụng một số thao tác dành riêng cho loại dữ liệu
thủ thuật 1. Làm giá hợp lý
Cột giá dường như dành cho chúng tôi nhưng không dành cho phần mềm. “$360. 0” là một chuỗi ký tự và không hàm ý số lượng hoặc giá trị số
Hãy cập nhật nó thành định dạng mà máy tính thực sự có thể hiểu được đó là 360
df["price_cleaned"] = df["price"].str[1:].str.replace[",",""].astype["float"]
Bước đầu tiên là lấy giá trị bắt đầu từ ký tự thứ hai vì ký tự đầu tiên là “$”
Sau đó, chúng tôi xóa dấu phẩy được sử dụng làm dấu tách hàng nghìn bằng cách sử dụng hàm thay thế trong bộ truy cập str
Bước cuối cùng là thay đổi kiểu dữ liệu thành float
Đây là khung dữ liệu được cập nhật
df [hình ảnh của tác giả]
thủ thuật 2. Có truyền hình?
Các tiện nghi được liệt kê trong cột tiện nghi. Giả sử tôi đặc biệt quan tâm đến TV và muốn tạo một cột cho biết có TV hay không
Có nhiều cách để thực hiện nhiệm vụ này. Một trong những cách hiệu quả là sử dụng khả năng hiểu danh sách, đặc biệt nếu bạn đang làm việc với khung dữ liệu lớn
Chúng ta cần tính đến việc “TV” và “tv” giống nhau
df["has_tv"] = pd.Series[['tv' in row.lower[] for row in df.amenities]].replace[{False:0, True:1}]
Trước tiên hãy giải thích về cách hiểu danh sách
['tv' in row.lower[] for row in df.amenities]
- Nó chiếm tất cả các hàng trong cột tiện nghi
- Chuyển đổi nó thành chữ thường để chúng tôi bắt được cả “TV” và “tv”
- Kiểm tra xem “tv” có tồn tại trong hàng không
Việc hiểu danh sách này trả về Đúng hoặc Sai nhưng tôi muốn chuyển đổi chúng thành 1 hoặc 0 tương ứng
Chức năng thay thế của Pandas có thể dễ dàng thực hiện nhiệm vụ này nên tôi chuyển đổi danh sách thành chuỗi Pandas và sau đó áp dụng chức năng thay thế
Khung dữ liệu bây giờ trông như thế này
df [hình ảnh của tác giả]
thủ thuật 3. Mục nhập bao nhiêu tuổi?
Có một cột gọi là "ngày cuối cùng" trong khung dữ liệu. Tôi quan tâm nhiều hơn đến tuổi của mục nhập hoặc quảng cáo này. Vì vậy, tôi cần tính số ngày từ hôm nay đến ngày cuối cùng
Đoạn mã sau tạo một cột có tên là “kể từ ngày cuối cùng” chứa thông tin tôi cần
df["since_last_date"] = [pd.to_datetime["2021-11-25"] - df["last_date"].astype["datetime64"]].dt.days
Chúng tôi có thể tính toán sự khác biệt giữa hai ngày miễn là chúng có kiểu dữ liệu phù hợp. Vì vậy, tôi cập nhật kiểu dữ liệu của cột ngày cuối cùng bằng hàm “astype”
Hàm “to_datetime” lấy một chuỗi và chuyển đổi nó thành ngày tháng
Đầu ra của hoạt động trừ này là như sau
0 256 days
1 316 days
2 71 days
3 328 days
4 350 days
5 237 days
Name: last_date, dtype: timedelta64[ns]
Chúng ta có thể trích xuất số lượng từ đầu ra này bằng cách sử dụng phương thức “ngày” trong bộ truy cập “dt”
df [hình ảnh của tác giả]
thủ thuật 4. Thời lượng tiêu chuẩn?
Cột thời lượng biểu thị một khoảng thời gian nhưng ở các đơn vị khác nhau. Tôi nghĩ bạn sẽ đồng ý rằng nó không hữu ích lắm ở định dạng này
Hãy tạo một cột thời lượng mới hiển thị thời lượng dưới dạng số ngày
Những gì chúng ta cần làm là
- Lấy từ thứ hai và chuyển đổi nó thành số ngày
- Nhân giá trị này với số lượng hiển thị trong từ đầu tiên
df["duration_days"] = df["duration"].str.split[" ", expand=True][1].replace[
{"week": 7, "weeks": 7, "days": 1, "day": 1, "month": 30}
].astype["int"] * df["duration"].str.split[" ", expand=True][0].astype["int"]
Mã này có vẻ phức tạp nhưng nó sẽ trở nên rất rõ ràng khi chúng ta xem qua từng bước
Phần sau lấy từ thứ hai trong cột thời lượng [e. g. tuần, tuần, tháng]
Hàm replace thay thế các từ bằng số ngày thích hợp
replace[
{"week": 7, "weeks": 7, "days": 1, "day": 1, "month": 30}
]
Sau đó, hàm “astype” chuyển đổi kiểu dữ liệu thành số nguyên
Phần thứ hai của phép nhân lấy từ đầu tiên trong cột thời lượng và chuyển đổi kiểu dữ liệu thành số nguyên
df.dtypeslast_date object0
price object
duration object
amenities object
dtype: object
Nhân hai giá trị này cho chúng ta một khoảng thời gian tiêu chuẩn về số ngày
df [hình ảnh của tác giả]
Bạn không phải thực hiện tất cả các thao tác này cùng một lúc. Một tùy chọn khác là tạo một cột có đơn vị như tháng, tuần, ngày, v.v. Sau đó, bạn có thể cập nhật giá trị cho phù hợp
Pandas cung cấp nhiều chức năng và phương pháp giúp đơn giản hóa và đẩy nhanh quá trình thao tác và phân tích dữ liệu
Xem xét lượng thời gian dành cho việc làm sạch dữ liệu thô, Pandas là một công cụ rất quan trọng đối với cả nhà khoa học dữ liệu và nhà phân tích dữ liệu
Bạn có thể trở thành thành viên Phương tiện để mở khóa quyền truy cập đầy đủ vào bài viết của tôi, cộng với phần còn lại của Phương tiện. Nếu bạn làm như vậy bằng cách sử dụng liên kết sau, tôi sẽ nhận được một phần phí thành viên của bạn mà bạn không phải trả thêm phí