Hướng dẫn python float(nan to none) - python float (nan để không)
@Bogatron có đúng, bạn có thể sử dụng In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 21, điều đáng chú ý là bạn có thể làm điều này trong gấu trúc: In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 21, it's worth noting that you can do this natively in pandas: Show
Lưu ý: Điều này thay đổi DTYPE của tất cả các cột thành In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 22.all columns to In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 22. Example:
Lưu ý: Những gì bạn không thể làm lại DataFrames In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 23 để cho phép tất cả các loại dữ liệu, sử dụng In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 24 và sau đó là phương thức DataFrame In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 25: In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 24, and then the DataFrame In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 25 method:
Thật không may, cả điều này, cũng không sử dụng In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 26, hoạt động với In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 Xem vấn đề này (đã đóng). In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 26, works with In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 see this (closed) issue. Bên cạnh đó, điều đáng chú ý là đối với hầu hết các trường hợp sử dụng, bạn không cần thay thế NAN bằng không, hãy xem câu hỏi này về sự khác biệt giữa NAN và không có gì trong Pandas.the difference between NaN and None in pandas. Tuy nhiên, trong trường hợp cụ thể này, có vẻ như bạn làm (ít nhất là tại thời điểm câu trả lời này). Khi nói đến sự cố dữ liệu, xử lý các giá trị bị thiếu là một nhiệm vụ không thể tránh khỏi. Không giống như các ngôn ngữ lập trình phổ biến khác, chẳng hạn như Java và C ++, Python không sử dụng từ khóa In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 28. Thay vào đó, Python sử dụng In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27. Khái niệm về In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 có thể gây nhầm lẫn cho người mới bắt đầu Python. Ở đây, tôi muốn sử dụng một số ví dụ để làm nổi bật sự khác biệt và tương đồng giữa In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27. Trước hết, hãy để Lôi nhìn vào loại dữ liệu của Python In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27. In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 là biểu diễn điểm nổi của IEEE 754 của không phải là một số (NAN), là loại nổi của Python tích hợp. Tuy nhiên, In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 là của Nonetype và là một đối tượng. Đối với mục đích so sánh, In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 so với In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 khác sử dụng In [21]: s = pd.Series([1, 2, 3]) In [22]: s.loc[0] = None In [23]: s Out[23]: 0 NaN 1 2.0 2 3.0 dtype: float641 trả về sai, trong khi In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 so với In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 khác bằng cách sử dụng In [21]: s = pd.Series([1, 2, 3]) In [22]: s.loc[0] = None In [23]: s Out[23]: 0 NaN 1 2.0 2 3.0 dtype: float644Return. Sử dụng cả In [21]: s = pd.Series([1, 2, 3]) In [22]: s.loc[0] = None In [23]: s Out[23]: 0 NaN 1 2.0 2 3.0 dtype: float641 và In [21]: s = pd.Series([1, 2, 3]) In [22]: s.loc[0] = None In [23]: s Out[23]: 0 NaN 1 2.0 2 3.0 dtype: float644, In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 so với một In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 khác trả về đúng. Mặc dù sự khác biệt về loại dữ liệu là In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27, 01 Điều trị In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 tương tự. Ví dụ, chúng tôi tạo 04 bằng cách đọc trong tệp CSV.Tại đây, DF có được hai cột: StringColumn và FloatColumn. Các loại dữ liệu là: Sau đó, chúng tôi đặt hàng thủ công hàng đầu tiên của StringColumn thành In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27. Đối với mục đích phân tích dữ liệu, chúng tôi muốn kiểm tra các giá trị bị thiếu trong DF. 04 đối xử In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 và 08SIMILLY. Cả In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 và 08CAN đều được phát hiện bằng cách sử dụng 11.Sau đó, để loại bỏ giá trị bị thiếu, chúng ta có thể chọn điền vào dữ liệu khác nhau theo kiểu dữ liệu của cột. Cả In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int647 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 đều có thể được điền bằng 14. Đối với các cột phân loại (cột chuỗi), chúng tôi muốn điền vào các giá trị bị thiếu với chế độ. Đối với các cột số (cột float), chúng tôi muốn điền vào các giá trị còn thiếu với giá trị trung bình.Như tóm tắt, In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 là các loại dữ liệu khác nhau trong Python. Tuy nhiên, khi bị thiếu phát hiện và loại bỏ giá trị, 04 đối xử với In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27 tương tự. Để phát hiện các giá trị bị thiếu, 20 trả về đúng cho cả In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27. Để loại bỏ các giá trị bị thiếu, 23 cũng hoạt động cho In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 29 và In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 27. Trong phần này, chúng tôi sẽ thảo luận về các giá trị thiếu (còn được gọi là NA) trong gấu trúc. Ghi chú Việc lựa chọn sử dụng 26 trong nội bộ để biểu thị dữ liệu bị thiếu phần lớn là vì lý do đơn giản và hiệu suất. Bắt đầu từ Pandas 1.0, một số loại dữ liệu tùy chọn bắt đầu thử nghiệm vô hướng 27 gốc bằng cách sử dụng phương pháp dựa trên mặt nạ. Xem ở đây để biết thêm.here for more.Xem sách dạy nấu ăn cho một số chiến lược nâng cao.cookbook for some advanced strategies. Các giá trị được coi là mất tích ”#Khi dữ liệu có nhiều hình dạng và hình thức, gấu trúc nhằm mục đích linh hoạt liên quan đến việc xử lý dữ liệu bị thiếu. Mặc dù 26 là điểm đánh dấu giá trị bị thiếu mặc định vì lý do tốc độ tính toán và sự thuận tiện, chúng ta cần có thể dễ dàng phát hiện giá trị này với dữ liệu thuộc các loại khác nhau: điểm nổi, số nguyên, boolean và đối tượng chung. Tuy nhiên, trong nhiều trường hợp, Python 29 sẽ phát sinh và chúng tôi cũng muốn xem xét rằng, thiếu sót hoặc không có sẵn.Ghi chú Việc lựa chọn sử dụng 26 trong nội bộ để biểu thị dữ liệu bị thiếu phần lớn là vì lý do đơn giản và hiệu suất. Bắt đầu từ Pandas 1.0, một số loại dữ liệu tùy chọn bắt đầu thử nghiệm vô hướng 27 gốc bằng cách sử dụng phương pháp dựa trên mặt nạ. Xem ở đây để biết thêm.In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True Xem sách dạy nấu ăn cho một số chiến lược nâng cao. In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False Cảnh báo Hiện tại, UFUNCS liên quan đến NDarray và 27 sẽ trả về một đối tượng chứa đầy các giá trị NA.do. Note that pandas/NumPy uses the fact that 37, and treats 29 like 39.In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False Loại trả lại ở đây có thể thay đổi để trả về một loại mảng khác trong tương lai. In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool Xem khả năng tương tác của DataFrame với các hàm Numpy để biết thêm về UFUNCS.Nếu bạn có một khung dữ liệu hoặc chuỗi sử dụng các loại truyền thống có dữ liệu bị thiếu được biểu thị bằng 39, có các phương thức tiện lợi 46 nối tiếp và 46 trong DataFrame có thể chuyển đổi dữ liệu để sử dụng các DTYPE mới hơn cho số nguyên, chuỗi và booleans được liệt kê ở đây. Điều này đặc biệt hữu ích sau khi đọc trong các bộ dữ liệu khi cho phép các độc giả như 48 và 49 suy ra các DTYPE mặc định.Support for integer NA for more). pandas provides a nullable integer array, which can be used
by explicitly requesting the dtype:In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 2 Trong ví dụ này, trong khi DTYPE của tất cả các cột được thay đổi, chúng tôi hiển thị kết quả cho 10 cột đầu tiên. Trong phần này, chúng tôi sẽ thảo luận về các giá trị thiếu (còn được gọi là NA) trong gấu trúc.Nullable integer data type for more. Datetimes#Ghi chú In [15]: df2 = df.copy() In [16]: df2["timestamp"] = pd.Timestamp("20120101") In [17]: df2 Out[17]: one two three four five timestamp a 0.469112 -0.282863 -1.509059 bar True 2012-01-01 c -1.135632 1.212112 -0.173215 bar False 2012-01-01 e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h 0.721555 -0.706771 -1.039575 bar True 2012-01-01 In [18]: df2.loc[["a", "c", "h"], ["one", "timestamp"]] = np.nan In [19]: df2 Out[19]: one two three four five timestamp a NaN -0.282863 -1.509059 bar True NaT c NaN 1.212112 -0.173215 bar False NaT e 0.119209 -1.044236 -0.861849 bar True 2012-01-01 f -2.104569 -0.494929 1.071804 bar False 2012-01-01 h NaN -0.706771 -1.039575 bar True NaT In [20]: df2.dtypes.value_counts() Out[20]: float64 3 object 1 bool 1 datetime64[ns] 1 dtype: int64 Việc lựa chọn sử dụng In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where(pd.notnull(df), None) In [4]: df1 Out[4]: 0 0 1 1 None 26 trong nội bộ để biểu thị dữ liệu bị thiếu phần lớn là vì lý do đơn giản và hiệu suất. Bắt đầu từ Pandas 1.0, một số loại dữ liệu tùy chọn bắt đầu thử nghiệm vô hướng In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where(pd.notnull(df), None) In [4]: df1 Out[4]: 0 0 1 1 None 27 gốc bằng cách sử dụng phương pháp dựa trên mặt nạ. Xem ở đây để biết thêm.Xem sách dạy nấu ăn cho một số chiến lược nâng cao. Các giá trị được coi là mất tích ”# In [21]: s = pd.Series([1, 2, 3]) In [22]: s.loc[0] = None In [23]: s Out[23]: 0 NaN 1 2.0 2 3.0 dtype: float64 Khi dữ liệu có nhiều hình dạng và hình thức, gấu trúc nhằm mục đích linh hoạt liên quan đến việc xử lý dữ liệu bị thiếu. Mặc dù 26 là điểm đánh dấu giá trị bị thiếu mặc định vì lý do tốc độ tính toán và sự thuận tiện, chúng ta cần có thể dễ dàng phát hiện giá trị này với dữ liệu thuộc các loại khác nhau: điểm nổi, số nguyên, boolean và đối tượng chung. Tuy nhiên, trong nhiều trường hợp, Python 29 sẽ phát sinh và chúng tôi cũng muốn xem xét rằng, thiếu sót hoặc không có sẵn.Nếu bạn muốn xem xét 30 và 31 để trở thành NA NA trong các tính toán, bạn có thể đặt 32. 0Để giúp phát hiện các giá trị bị thiếu dễ dàng hơn (và trên các DTYpes mảng khác nhau), Pandas cung cấp các hàm In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where(pd.notnull(df), None) In [4]: df1 Out[4]: 0 0 1 1 None 33 và In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where(pd.notnull(df), None) In [4]: df1 Out[4]: 0 0 1 1 None 34, cũng là các phương thức trên các đối tượng sê -ri và DataFrame:Người ta phải chú ý rằng trong Python (và Numpy), 35 don lồng so sánh bằng nhau, nhưng 36 làm. Lưu ý rằng gấu trúc/numpy sử dụng thực tế là 37 và đối xử với 29 như 39. 1Thống kê mô tả và phương pháp tính toán được thảo luận trong tổng quan về cấu trúc dữ liệu (và được liệt kê ở đây và ở đây) đều được ghi để giải thích cho dữ liệu bị thiếu. Ví dụ:data structure overview (and listed here and here) are all written to account for missing data. For example:
2SUM/SPROT OF EMPTIES/NANS#Cảnh báo Hành vi này hiện là tiêu chuẩn kể từ v0.22.0 và phù hợp với mặc định trong 52; Sum/prod trước đây của All-NA hoặc Dòng/DataFrames trống sẽ trả về NAN. Xem V0.22.0 WhatsNew để biết thêm.v0.22.0 whatsnew for
more.Tổng của một chuỗi hoặc cột trống hoặc cột của DataFrame là 0. 3Sản phẩm của một chuỗi hoặc cột trống hoặc toàn bộ của DataFrame là 1. 4Giá trị NA trong Groupby#Các nhóm NA trong Groupby được tự động loại trừ. Hành vi này phù hợp với R, ví dụ: 5Xem phần Nhóm ở đây để biết thêm thông tin.here for more information. Làm sạch / điền vào dữ liệu bị thiếu#Các đối tượng gấu trúc được trang bị các phương pháp thao tác dữ liệu khác nhau để xử lý dữ liệu bị thiếu. Điền vào các giá trị bị thiếu: fillna# 53 có thể điền vào các giá trị NA NA với dữ liệu không phải NA theo một vài cách mà chúng tôi minh họa:Thay thế NA bằng giá trị vô hướng 6Lấp đầy khoảng trống về phía trước hoặc lùi Sử dụng các đối số điền tương tự như tái xuất, chúng ta có thể truyền bá các giá trị không phải NA về phía trước hoặc lùi:reindexing, we can propagate non-NA values forward or backward: 7Giới hạn số lượng điền Nếu chúng tôi chỉ muốn các khoảng trống liên tiếp lấp đầy lên đến một số điểm dữ liệu nhất định, chúng tôi có thể sử dụng từ khóa 54: 8Để nhắc nhở bạn, đây là những phương pháp điền có sẵn:
Với dữ liệu chuỗi thời gian, sử dụng pad/ffill là cực kỳ phổ biến, do đó, giá trị được biết đến cuối cùng có sẵn tại mọi thời điểm. 55 tương đương với 56 và 57 tương đương với 58Điền vào một pandasobject#Bạn cũng có thể sử dụng một sê -ri hoặc sê -ri có thể phù hợp. Các nhãn của dict hoặc chỉ số của loạt phải khớp với các cột của khung bạn muốn điền. Trường hợp sử dụng của điều này là để lấp đầy một khung dữ liệu với giá trị trung bình của cột đó. 9Kết quả tương tự như trên, nhưng đang sắp xếp giá trị ‘điền vào một loạt trong trường hợp này. 0Thả nhãn trục với dữ liệu bị thiếu: Dropna#Bạn có thể chỉ muốn loại trừ các nhãn khỏi tập dữ liệu đề cập đến dữ liệu bị thiếu. Để làm điều này, hãy sử dụng 59: 1
Một 59 tương đương có sẵn cho loạt. DataFrame.dropna có nhiều tùy chọn hơn đáng kể so với series.dropna, có thể được kiểm tra trong API.in the API.Interpolation#Cả hai đối tượng series và dataFrame đều có 61, theo mặc định, thực hiện phép nội suy tuyến tính tại các điểm dữ liệu bị thiếu. 2 3 Nội suy nhận biết chỉ mục có sẵn thông qua từ khóa 62: 4Đối với một chỉ số dấu phẩy động, hãy sử dụng 63: 5Bạn cũng có thể nội suy với DataFrame: 6Đối số 62 cho phép truy cập vào các phương pháp nội suy fancier. Nếu bạn đã cài đặt SCIPY, bạn có thể chuyển tên của thói quen nội suy 1-D sang 62. Bạn sẽ muốn tham khảo tài liệu nội suy SCIPY đầy đủ và hướng dẫn tham khảo để biết chi tiết. Phương pháp nội suy thích hợp sẽ phụ thuộc vào loại dữ liệu bạn đang làm việc.
Cảnh báo Hành vi này hiện là tiêu chuẩn kể từ v0.22.0 và phù hợp với mặc định trong 52; Sum/prod trước đây của All-NA hoặc Dòng/DataFrames trống sẽ trả về NAN. Xem V0.22.0 WhatsNew để biết thêm. 7Tổng của một chuỗi hoặc cột trống hoặc cột của DataFrame là 0. 8Sản phẩm của một chuỗi hoặc cột trống hoặc toàn bộ của DataFrame là 1. 9 Giá trị NA trong Groupby# In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True0 Các nhóm NA trong Groupby được tự động loại trừ. Hành vi này phù hợp với R, ví dụ:Xem phần Nhóm ở đây để biết thêm thông tin. In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True1 Làm sạch / điền vào dữ liệu bị thiếu# In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True2 Theo mặc định, các giá trị 26 được điền cho dù chúng ở bên trong (được bao quanh bởi) các giá trị hợp lệ hiện có hoặc bên ngoài các giá trị hợp lệ hiện có. Tham số 81 hạn chế điền vào các giá trị bên trong hoặc bên ngoài.In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True3 Thay thế các giá trị chung#Thường thì chúng tôi muốn thay thế các giá trị tùy ý bằng các giá trị khác. 82 nối tiếp và 82 trong DataFrame cung cấp một cách hiệu quả nhưng linh hoạt để thực hiện các thay thế đó.Đối với một chuỗi, bạn có thể thay thế một giá trị duy nhất hoặc danh sách các giá trị bằng một giá trị khác: In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True4 Bạn có thể thay thế danh sách các giá trị bằng danh sách các giá trị khác: In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True5 Bạn cũng có thể chỉ định một mô tả ánh xạ: In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True6 Đối với DataFrame, bạn có thể chỉ định các giá trị riêng lẻ theo cột: In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True7 Thay vì thay thế bằng các giá trị được chỉ định, bạn có thể coi tất cả các giá trị đã cho là thiếu và nội suy chúng: In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True8 Chuỗi/thay thế biểu thức chính quy#Ghi chú Các chuỗi Python có tiền tố với ký tự 84 như 85 được gọi là chuỗi Raw Raw. Họ có các ngữ nghĩa khác nhau liên quan đến dấu gạch chéo ngược với các chuỗi mà không có tiền tố này. Backslashes trong các chuỗi thô sẽ được hiểu là một dấu gạch chéo ngược, ví dụ: 86. Bạn nên đọc về chúng nếu điều này không rõ ràng.Thay thế ‘. In [1]: df = pd.DataFrame( ...: np.random.randn(5, 3), ...: index=["a", "c", "e", "f", "h"], ...: columns=["one", "two", "three"], ...: ) ...: In [2]: df["four"] = "bar" In [3]: df["five"] = df["one"] > 0 In [4]: df Out[4]: one two three four five a 0.469112 -0.282863 -1.509059 bar True c -1.135632 1.212112 -0.173215 bar False e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False h 0.721555 -0.706771 -1.039575 bar True In [5]: df2 = df.reindex(["a", "b", "c", "d", "e", "f", "g", "h"]) In [6]: df2 Out[6]: one two three four five a 0.469112 -0.282863 -1.509059 bar True b NaN NaN NaN NaN NaN c -1.135632 1.212112 -0.173215 bar False d NaN NaN NaN NaN NaN e 0.119209 -1.044236 -0.861849 bar True f -2.104569 -0.494929 1.071804 bar False g NaN NaN NaN NaN NaN h 0.721555 -0.706771 -1.039575 bar True9 Bây giờ hãy làm điều đó với một biểu thức thông thường loại bỏ xung quanh khoảng trắng (regex -> regex): In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False0 Thay thế một vài giá trị khác nhau (danh sách -> Danh sách): In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False1 Danh sách Regex -> Danh sách Regex: In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False2 Chỉ tìm kiếm trong cột 88 (dict -> dict):In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False3 Giống như ví dụ trước, nhưng sử dụng biểu thức chính quy để tìm kiếm thay thế (Dict of Regex -> Dict): In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False4 Bạn có thể vượt qua từ điển lồng nhau của các biểu thức thông thường sử dụng 89:In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False5 Ngoài ra, bạn có thể vượt qua từ điển lồng nhau như vậy: In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False6 Bạn cũng có thể sử dụng nhóm của một biểu thức phù hợp thông thường khi thay thế (Dict of Regex -> Dict of Regex), điều này cũng hoạt động cho các danh sách. In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False7 Bạn có thể vượt qua một danh sách các biểu thức thông thường, trong đó những biểu thức phù hợp sẽ được thay thế bằng vô hướng (danh sách regex -> regex). In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False8 Tất cả các ví dụ biểu thức thông thường cũng có thể được truyền bằng đối số 90 dưới dạng đối số 91. Trong trường hợp này, đối số 92 phải được truyền rõ ràng bằng tên hoặc 91 phải là một từ điển lồng nhau. Ví dụ trước, trong trường hợp này, sau đó sẽ là:In [7]: df2["one"] Out[7]: a 0.469112 b NaN c -1.135632 d NaN e 0.119209 f -2.104569 g NaN h 0.721555 Name: one, dtype: float64 In [8]: pd.isna(df2["one"]) Out[8]: a False b True c False d True e False f False g True h False Name: one, dtype: bool In [9]: df2["four"].notna() Out[9]: a True b False c True d False e True f True g False h True Name: four, dtype: bool In [10]: df2.isna() Out[10]: one two three four five a False False False False False b True True True True True c False False False False False d True True True True True e False False False False False f False False False False False g True True True True True h False False False False False9 Điều này có thể thuận tiện nếu bạn không muốn vượt qua 89 mỗi khi bạn muốn sử dụng biểu thức thông thường.Ghi chú Các chuỗi Python có tiền tố với ký tự 84 như 85 được gọi là chuỗi Raw Raw. Họ có các ngữ nghĩa khác nhau liên quan đến dấu gạch chéo ngược với các chuỗi mà không có tiền tố này. Backslashes trong các chuỗi thô sẽ được hiểu là một dấu gạch chéo ngược, ví dụ: 86. Bạn nên đọc về chúng nếu điều này không rõ ràng.Thay thế ‘.Bây giờ hãy làm điều đó với một biểu thức thông thường loại bỏ xung quanh khoảng trắng (regex -> regex): In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False0 Thay thế một vài giá trị khác nhau (danh sách -> Danh sách): In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False1 Danh sách Regex -> Danh sách Regex: In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False2 Chỉ tìm kiếm trong cột In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where(pd.notnull(df), None) In [4]: df1 Out[4]: 0 0 1 1 None 88 (dict -> dict):Giống như ví dụ trước, nhưng sử dụng biểu thức chính quy để tìm kiếm thay thế (Dict of Regex -> Dict):
Điều này có thể thuận tiện nếu bạn không muốn vượt qua 89 mỗi khi bạn muốn sử dụng biểu thức thông thường.In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False3 Bất cứ nơi nào trong các ví dụ trên 95 mà bạn thấy một biểu thức thông thường, một biểu thức thông thường được biên dịch cũng hợp lệ.In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False4 Thay thế số# In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False5 82 tương tự như 53.In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False6 Thay thế nhiều hơn một giá trị là có thể bằng cách truyền một danh sách.Nullable integer data type for more. Bạn cũng có thể hoạt động trên DataFrame tại chỗ:Thiếu quy tắc đúc dữ liệu và lập chỉ mục# Mặc dù gấu trúc hỗ trợ lưu trữ các mảng số nguyên và boolean, các loại này không có khả năng lưu trữ dữ liệu bị thiếu. Cho đến khi chúng tôi có thể chuyển sang sử dụng loại NA gốc trong Numpy, chúng tôi đã thiết lập một số quy tắc đúc của người Viking. Khi một hoạt động tái xuất giới giới thiệu dữ liệu bị thiếu, loạt phim sẽ được sử dụng theo các quy tắc được giới thiệu trong bảng dưới đây. loại dữ liệu Đúc đếninteger, boolean and dedicated string data types as the missing value indicator. Số nguyên sự vật In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False7 Hiện tại, Pandas chưa sử dụng các loại dữ liệu đó theo mặc định (khi tạo DataFrame hoặc Sê -ri hoặc khi đọc trong dữ liệu), vì vậy bạn cần chỉ định DTYPE rõ ràng. Một cách dễ dàng để chuyển đổi sang các DTYPE đó được giải thích ở đây.here. Tuyên truyền trong các hoạt động số học và so sánh#Nói chung, các giá trị bị thiếu lan truyền trong các hoạt động liên quan đến 01. Khi một trong những toán hạng không rõ, kết quả của hoạt động cũng không được biết.Ví dụ, 01 tuyên truyền trong các hoạt động số học, tương tự như 39:In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False8 Có một vài trường hợp đặc biệt khi kết quả được biết đến, ngay cả khi một trong các toán hạng là 27.In [11]: None == None # noqa: E711 Out[11]: True In [12]: np.nan == np.nan Out[12]: False9 Trong các hoạt động bình đẳng và so sánh, 01 cũng tuyên truyền. Điều này sai lệch so với hành vi của 39, trong đó so sánh với 39 luôn trả lại 15.In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool0 Để kiểm tra xem giá trị có bằng 01 hay không, hàm 33 có thể được sử dụng không:In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool1 Một ngoại lệ về quy tắc tuyên truyền cơ bản này là giảm (chẳng hạn như giá trị trung bình hoặc tối thiểu), trong đó gấu trúc mặc định bỏ qua các giá trị bị thiếu. Xem ở trên để biết thêm.above for more. Hoạt động logic#Đối với các hoạt động logic, 01 tuân theo các quy tắc của logic ba giá trị (hoặc logic kleene, tương tự như R, SQL và Julia). Logic này có nghĩa là chỉ tuyên truyền các giá trị bị thiếu khi nó được yêu cầu về mặt logic.Ví dụ: đối với hoạt động logic hoặc hoạt động logic ( 19), nếu một trong các toán hạng là 20, chúng ta đã biết kết quả sẽ là ____220, bất kể giá trị khác (vì vậy bất kể giá trị còn thiếu sẽ là 20 hoặc 15). Trong trường hợp này, 01 không tuyên truyền:In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool2 Mặt khác, nếu một trong các toán hạng là 15, kết quả phụ thuộc vào giá trị của toán hạng khác. Do đó, trong trường hợp này 01 tuyên truyền:In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool3 Hành vi của hoạt động logic và hoạt động logic ( 27) có thể được lấy bằng cách sử dụng logic tương tự (trong đó bây giờ 01 sẽ không tuyên truyền nếu một trong các toán hạng đã được 15):In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool4 In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool5 In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where(pd.notnull(df), None) In [4]: df1 Out[4]: 0 0 1 1 None 27 trong bối cảnh boolean#Vì giá trị thực tế của NA là không rõ, nên việc chuyển đổi NA thành giá trị boolean là mơ hồ. Những điều sau đây gây ra lỗi: In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool6 Điều này cũng có nghĩa là 01 không thể được sử dụng trong bối cảnh mà nó được đánh giá là boolean, chẳng hạn như 32 trong đó 33 có khả năng là 01. Trong những trường hợp như vậy, 33 có thể được sử dụng để kiểm tra 01 hoặc 33 là 01 có thể tránh được, ví dụ bằng cách điền vào các giá trị bị thiếu trước đó.Một tình huống tương tự xảy ra khi sử dụng các đối tượng Data hoặc DataFrame trong các câu lệnh 39, xem bằng cách sử dụng các câu lệnh IF/Truth với gấu trúc.Using if/truth statements with pandas.Numpy Ufuncs# 40 thực hiện giao thức Numpy từ ____241. Hầu hết các UFUNCS hoạt động với 27 và thường trả về 27:In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool7 Cảnh báo Hiện tại, UFUNCS liên quan đến NDarray và 27 sẽ trả về một đối tượng chứa đầy các giá trị NA.In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool8 Loại trả lại ở đây có thể thay đổi để trả về một loại mảng khác trong tương lai. Xem khả năng tương tác của DataFrame với các hàm Numpy để biết thêm về UFUNCS.DataFrame interoperability with NumPy functions for more on ufuncs. Conversion#Nếu bạn có một khung dữ liệu hoặc chuỗi sử dụng các loại truyền thống có dữ liệu bị thiếu được biểu thị bằng 39, có các phương thức tiện lợi 46 nối tiếp và 46 trong DataFrame có thể chuyển đổi dữ liệu để sử dụng các DTYPE mới hơn cho số nguyên, chuỗi và booleans được liệt kê ở đây. Điều này đặc biệt hữu ích sau khi đọc trong các bộ dữ liệu khi cho phép các độc giả như 48 và 49 suy ra các DTYPE mặc định.here. This is especially helpful after reading in data sets when letting the readers
such as 48 and 49 infer default dtypes.Trong ví dụ này, trong khi DTYPE của tất cả các cột được thay đổi, chúng tôi hiển thị kết quả cho 10 cột đầu tiên. In [13]: df2["one"] == np.nan Out[13]: a False b False c False d False e False f False g False h False Name: one, dtype: bool9 In [14]: pd.Series([1, 2, np.nan, 4], dtype=pd.Int64Dtype()) Out[14]: 0 1 1 2 20 |