Một điều tuyệt vời đã xảy ra vào năm pandas
0.24.0
; . Cuối cùng, có thể thiếu các giá trị trong cột int64
của bạn. Trước bản phát hành này, mọi giá trị bị thiếu sẽ khiến kiểu dữ liệu của cột thay đổi thành float64
. Vấn đề này đã tồn tại trong một con hẻm tối trong nhiều năm sẵn sàng mang đến cho người dùng pandas
mới một sự rung chuyển nhanh chóng
Đây là một ví dụ về cột int64
biến thành float64
. Có một bộ customers
và một bộ orders
. Tuy nhiên, không phải khách hàng nào cũng có đơn hàng. Khi các bộ dữ liệu được hợp nhất với nhau, có một hàng dành cho khách hàng 2 không có 0.24.0
0
Trong orders
kiểu dữ liệu của 0.24.0
0 là int64
. Dưới đây trong 0.24.0
4, nó thay đổi thành float64
. Ngoài ra, hãy lưu ý rằng các giá trị 0.24.0
0 có thêm “. 0” được thêm vào cuối để chỉ ra rằng cột bây giờ là float64
Điều này thật bất ngờ và khó hiểu. Lý do mà pandas
thay đổi int64
thành float64
là do giá trị bị thiếu trong cột. Vì pandas
không thể chắc chắn rằng giá trị bị thiếu không phải là số thập phân, nên nó sẽ tự động chuyển đổi kiểu dữ liệu của cột. Mặc dù cách tiếp cận này giúp thao tác dữ liệu an toàn hơn, nhưng bạn sẽ ngạc nhiên khi lần đầu tiên nhìn thấy nó và nó có thể gây ra lỗi mà dường như không có lý do
pandas
0.24.0
đã thêm một cách giải quyết vấn đề tuyệt vời. Bây giờ có kiểu dữ liệu pandas
4 cho phép giá trị null. Huzzah. Chúng ta hãy xem loại dữ liệu mới đang hoạt động
Sự khác biệt duy nhất với mã này là nó đặt loại dữ liệu của 0.24.0
0 là pandas
6 bằng cách sử dụng pandas
7. Trong pandas
8 được hợp nhất, 0.24.0
0 vẫn là một pandas
6 mặc dù có các giá trị bị thiếu. Ngoài ra, hãy chú ý đến việc thiếu “. 0” sau các giá trị 0.24.0
0. Sửa chữa đơn giản này giải quyết vấn đề
Loại int64
2 mới giải quyết vấn đề cột int64
thay đổi một cách bí ẩn thành float64
bất cứ khi nào thiếu giá trị. Tôi khuyên bạn nên khai báo rõ ràng trường số nguyên là loại pandas
6 bất cứ khi nào bạn cần trường dữ liệu số nguyên. Điều này sẽ ngăn chặn bất kỳ bất ngờ không mong muốn nào trong các bước xử lý dữ liệu sau này
Tìm kiếm Null trong Python? . Tuy nhiên, Python có Không có, tương đương gần nhất với Null từ các ngôn ngữ lập trình khác. Hãy khám phá đối tượng Không có của Python
Nếu bạn đã quen thuộc với các ngôn ngữ lập trình khác như Java, JavaScript hoặc PHP, bạn có thể thắc mắc liệu Python có giá trị Null hoạt động giống như Null trong các ngôn ngữ khác không
Câu trả lời ngắn gọn là không có Null trong Python, nhưng có đối tượng Không có mà các lập trình viên Python sử dụng để xác định các đối tượng và biến null. Tuy nhiên, điều quan trọng là phải hiểu rằng mặc dù Không phục vụ một số mục đích giống như Null trong các ngôn ngữ khác, nhưng nó vẫn rất khác so với Null mà bạn có thể quen dùng.
Giá trị Null đặc biệt được sử dụng trong nhiều ngôn ngữ lập trình [e. g. C, Java, JavaScript, PHP] biểu thị một con trỏ trống, một giá trị không xác định hoặc một biến chưa được khởi tạo. Thông thường, Null được định nghĩa là 0 trong các ngôn ngữ này. Trong Python, Không ai có thể phục vụ các mục đích giống như Null nhưng nó không được xác định là 0 hoặc bất kỳ giá trị nào khác. Không ai trong Python là một đối tượng và là công dân hạng nhất
Trong bài viết này, tôi sẽ thảo luận về ý nghĩa của điều này và cách bạn có thể sử dụng Không có gì của Python một cách hiệu quả. Sau đó, bạn có thể bắt đầu thực hành Python ngay với Kiến thức cơ bản về Python của chúng tôi. Khóa học Phần 1, bao gồm các khái niệm chính ở cấp độ đầu vào với 95 bài tập tương tác
Không có gì trong Python. Lặn sâu
Hãy bắt đầu bằng cách xác định một vài điều mà Không có thì không. Nó không giống như Sai, mặc dù đối tượng Không có là sai [e. g. đánh giá là sai trong phép toán Boolean]. Ngoài ra, Không có không phải là một số không hoặc một chuỗi rỗng. Mọi so sánh với đối tượng Không trả về Sai, ngoại trừ so sánh Không với chính nó
Để giúp bạn hiểu đối tượng Không ai trong Python là gì, chúng ta sẽ xem qua một số trường hợp sử dụng, bao gồm
- Gán Không cho một biến
- Thử nghiệm cho Không
- Nhận Không có đầu ra chức năng
- Sử dụng Không làm tham số mặc định
Gán một đối tượng Không có cho một biến
Một số ngôn ngữ lập trình cho phép giới thiệu các biến mới thông qua khai báo mà không cần gán giá trị ban đầu rõ ràng. Giá trị ban đầu mặc định trong những trường hợp như vậy thường là Null
Trong Python, mọi thứ hoạt động rất khác. Để giới thiệu một biến mới, bạn cần gán một giá trị nhất định cho biến đó, giá trị này có thể là đối tượng Không có. Nếu bạn không gán bất kỳ giá trị nào cho một biến, biến đó được coi là không xác định và bạn sẽ nhận được một
None6 khi đề cập đến nó
Ví dụ: hãy thử in một biến không xác định so với. một biến đã được gán một đối tượng Không có
print [employees]
đầu ra
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]
đầu ra
None
Tuy nhiên, một đối tượng Không có thể được sửa đổi, được tham chiếu bằng các phương thức Python hoặc được sử dụng với các toán tử. Nếu bạn đề cập đến một đối tượng Không có trong những trường hợp như vậy, bạn sẽ nhận được một
None7. Ví dụ
employees = None print[employees + 1]
đầu ra
TypeError Traceback [most recent call last] in [] ----> 1 print[employees + 1] TypeError: unsupported operand type[s] for +: 'NoneType' and 'int'
Như bạn có thể thấy trong quá trình truy nguyên, lỗi xảy ra do tham chiếu đến một đối tượng Không có
Kiểm tra nếu một biến là không có
Bạn có thể kiểm tra xem một biến có được gán Không hay không bằng cách sử dụng toán tử
None8 và
None9
employees = None if employees is None: print["It is a None object."] else: print["It is not a None object "]
đầu ra
It is a None object.
Lưu ý rằng điều quan trọng là sử dụng các toán tử nhận dạng [như
None8 và
None9] với các đối tượng Không có trong Python chứ không phải các toán tử đẳng thức như
employees = None print[employees + 1]2 và
employees = None print[employees + 1]3. Vấn đề là các toán tử đẳng thức có thể đưa ra kết quả sai khi bạn đang so sánh các đối tượng do người dùng xác định sẽ ghi đè chúng. Đây là một ví dụ
class EquityVsIdentity[]: def __eq__ [self, other]: return True check = EquityVsIdentity[] print[check == None] print[check is None]
đầu ra
True False
Ở đây, toán tử đẳng thức [“
employees = None print[employees + 1]2”] trả về câu trả lời sai vì nó bị ghi đè bởi một đối tượng do người dùng xác định, trong khi toán tử nhận dạng [
employees = None print[employees + 1]5] trả về kết quả đúng vì nó không thể bị ghi đè
Một điều thú vị khác cần lưu ý là đối tượng Không có gì là sai, bạn chỉ cần sử dụng câu lệnh if để kiểm tra xem biến đó có phải là Không có hay không
employees = None if employees: print["It is not a None object."] else: print["It is a None object."]
đầu ra
It is a None object.
Không có như một chức năng đầu ra
Trước hết, Không có là giá trị được trả về khi không có câu lệnh
employees = None print[employees + 1]6 trong một hàm. Hãy tạo một hàm không trả về bất kỳ giá trị nào và kiểm tra đầu ra của nó
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]1
đầu ra
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]2
Như bạn có thể thấy, hàm trên không trả về giá trị một cách rõ ràng. Python cung cấp một câu lệnh trả về ngầm định với giá trị trả về là Không có. Hãy xem hướng dẫn này về cách xác định hàm trong Python để tìm hiểu thêm về các trường hợp mà bạn có thể muốn hàm của mình thực hiện một số thao tác mà không trả về bất kỳ giá trị nào
Một số hàm trả về một đối tượng thực khi chúng có kết quả thực và Không có khi không có kết quả. Gói re để xử lý biểu thức chính quy trong Python có một số hàm như vậy
Bạn có thể kiểm tra xem hàm có trả về giá trị hay không bằng cách so sánh kết quả với Không. Ví dụ: hãy cùng khám phá đầu ra của hàm
employees = None print[employees + 1]7 của gói re khi không có kết quả khớp
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]3
đầu ra
Ở đây, tiếng Tây Ban Nha không nằm trong số ngôn ngữ mà người này nói. Do đó, khi tìm kiếm “tiếng Tây Ban Nha”, chúng tôi nhận được một đối tượng Không có. Chúng tôi đã kiểm tra và xác nhận rằng đầu ra của hàm
employees = None print[employees + 1]7 là Không có trong trường hợp này
Không có giá trị mặc định cho tham số tùy chọn
Cuối cùng, Không có gì thường được sử dụng làm giá trị mặc định cho tham số tùy chọn của hàm, đặc biệt khi bạn cần xử lý kiểu dữ liệu có thể thay đổi, chẳng hạn như danh sách. Nếu bạn đặt giá trị mặc định của tham số thành danh sách, danh sách này sẽ được cập nhật trong tất cả các lần gọi hàm tiếp theo mà không chỉ định tham số tùy chọn tương ứng – trong khi bạn thường muốn có một danh sách trống mới mỗi lần
Nó sẽ rõ ràng hơn sau một ví dụ. Chúng ta sẽ bắt đầu bằng cách tạo một hàm sử dụng danh sách làm giá trị mặc định cho tham số tùy chọn
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]4
đầu ra
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]5
Như bạn thấy, chúng ta đã tạo một hàm đặt một phần tử mới ở vị trí số 1 trong danh sách. Nó hoạt động tốt khi chúng tôi cung cấp tham số bắt đầu. Tuy nhiên, nếu chúng tôi không cung cấp tham số tùy chọn này, chúng tôi sẽ bắt đầu thấy hành vi không chính xác với mỗi lần gọi hàm mới
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]6
đầu ra
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]7
đầu ra
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]8
đầu ra
NameError Traceback [most recent call last] in [] ----> 1 print [employees] NameError: name 'employees' is not defined employees = None print [employees]9
Vì danh sách là một loại đối tượng có thể thay đổi, chúng tôi nhận được một danh sách được cập nhật sau mỗi lần gọi hàm khi chúng tôi không chuyển một danh sách hiện có
Nếu bạn muốn có một danh sách mới với mỗi cuộc gọi, hãy cân nhắc sử dụng đối tượng Không có làm tham số mặc định
None0
đầu ra
None1
Trong chức năng này, chúng tôi kiểm tra xem danh sách bắt đầu có phải là Không có hay không; . Điều này đảm bảo rằng chúng tôi có hành vi chính xác khi chúng tôi không cung cấp danh sách bắt đầu cho chức năng
None2
đầu ra
None3
đầu ra
None4
đầu ra
None5
Bây giờ chúng tôi nhận được đầu ra chính xác, bất kể chúng tôi gọi hàm bao nhiêu lần. Đây chỉ là một ví dụ về cách một đối tượng Không có thể được sử dụng một cách hiệu quả làm giá trị mặc định cho tham số tùy chọn
Hãy thực hành Không có gì trong Python
Mặc dù Python không có giá trị Null như bạn có thể đã quen, nhưng nó có tất cả các công cụ cần thiết để xử lý các giá trị null. Hơn nữa, do cú pháp đơn giản và dễ làm theo của Python, bạn có thể học những điều cơ bản về Python rất nhanh chóng – có thể trong vòng chưa đầy một tháng. Điều quan trọng là thực hiện một cách tiếp cận có cấu trúc để nghiên cứu và thực hiện nhiều mã hóa
Nếu bạn chưa quen với Python, tôi khuyên bạn nên bắt đầu với khóa học Cơ bản về Python Phần 1. Trong 95 bài tập tương tác, bạn sẽ học cách chấp nhận thông tin đầu vào từ người dùng, sử dụng các biến và phép toán trong Python cũng như viết câu lệnh if, vòng lặp và hàm. Bạn cũng sẽ hiểu rõ hơn về loại Không. Bạn có thể đọc thêm về khóa học này trong bài viết tổng quan này
Khi bạn đã sẵn sàng để tìm hiểu thêm, hãy xem bài Học lập trình với Python. Nó bao gồm năm khóa học tương tác với hàng trăm thử thách mã hóa. Sau khi hoàn thành phần học tập này, bạn sẽ hiểu rõ về cấu trúc dữ liệu Python, bao gồm danh sách, bộ, từ điển và bộ dữ liệu. Bạn cũng sẽ cảm thấy thoải mái khi sử dụng các thuật toán và chức năng tích hợp chính, chẳng hạn như các thuật toán và chức năng được sử dụng để tìm kiếm và sắp xếp trong Python