@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 2 3 4 dtype: Int641, đ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 2 3 4 dtype: Int641, it's worth noting that you can do this natively in pandas:
df1 = df.where[pd.notnull[df], None]
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 2 3 4 dtype: Int642.all columns to
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int642.
Example:
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
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 2 3 4 dtype: Int643 để 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 2 3 4 dtype: Int644 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 2 3 4 dtype: Int645:
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int644, and then the DataFrame
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int645 method:
df1 = df.astype[object].replace[np.nan, 'None']
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 2 3 4 dtype: Int646, hoạt động với
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647 Xem vấn đề này [đã đóng].
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int646, works with
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647 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 2 3 4 dtype: Int648. 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 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647. Khái niệm về
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647 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 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647.
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 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647.
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 2 3 4 dtype: Int647 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 2 3 4 dtype: Int647 so với một
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647 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 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647,
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
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 2 3 4 dtype: Int647 tương tự. Ví dụ, chúng tôi tạo
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
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 2 3 4 dtype: Int647.
Đố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.
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
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à
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
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à
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
08CAN đều được phát hiện bằng cách 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
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 2 3 4 dtype: Int647 đều có thể được điền bằ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
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 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647 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ị,
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
04 đối xử với In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647 tương tự. Để phát hiện các giá trị bị thiếu,
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
20 trả về đúng cho cả In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647. Để loại bỏ các giá trị bị thiếu,
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
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 2 3 4 dtype: Int649 và
In [14]: pd.Series[[1, 2, np.nan, 4], dtype=pd.Int64Dtype[]] Out[14]: 0 1 1 2 2 3 4 dtype: Int647.
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
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.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ù
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 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 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
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
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.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à
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 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 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
37, and treats 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
29 like 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
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
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
39, có các phương thức tiện lợi df1 = df.astype[object].replace[np.nan, 'None']
46 nối tiếp và df1 = df.astype[object].replace[np.nan, 'None']
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ư df1 = df.astype[object].replace[np.nan, 'None']
48 và df1 = df.astype[object].replace[np.nan, 'None']
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 3 4 dtype: Int64
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.
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
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
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ù
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 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 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
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
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
30 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
31 để trở thành NA NA trong các tính toán, bạn có thể đặ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
32.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
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:
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
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
Người ta phải chú ý rằng trong Python [và Numpy],
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
35 don lồng so sánh bằng nhau, như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
36 làm. Lưu ý rằng gấu trúc/numpy sử dụng thực tế là 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
37 và đối xử với 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
29 như 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
39.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
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:
Khi tổng dữ liệu, các giá trị Na [thiếu] sẽ được coi là không.
Nếu dữ liệu là tất cả NA, kết quả sẽ là 0.
Các phương pháp tích lũy như
49 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
50 bỏ qua các giá trị NA theo mặc định, nhưng bảo tồn chúng trong các mảng kết quả. Để ghi đè hành vi này và bao gồm các giá trị NA, hãy sử dụngIn [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
51.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
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
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
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
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.
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
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.
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
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ụ:
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
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#
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
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
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
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:
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
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
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
54: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
8Để nhắc nhở bạn, đây là những phương pháp điền có sẵn:
pad / ffill | Điền vào các giá trị về phía trước |
Bfill / Onfill | Lấp đầy các giá trị ngược |
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.
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
55 tương đương với 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
56 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
57 tương đương với 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
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 đó.
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
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.
df1 = df.astype[object].replace[np.nan, 'None']
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
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
59:df1 = df.astype[object].replace[np.nan, 'None']
1
Mộ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
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ó
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
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.df1 = df.astype[object].replace[np.nan, 'None']
2 df1 = df.astype[object].replace[np.nan, 'None']
3 Nội suy nhận biết chỉ mục có sẵn thông qua từ khóa
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
62:df1 = df.astype[object].replace[np.nan, 'None']
4Đối với một chỉ số dấu phẩy động, hãy 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
63:df1 = df.astype[object].replace[np.nan, 'None']
5Bạn cũng có thể nội suy với DataFrame:
df1 = df.astype[object].replace[np.nan, 'None']
6Đối số
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
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 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
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.Nếu bạn đang đối phó với một chuỗi thời gian đang phát triển với tốc độ ngày càng tăng,
66 có thể phù hợp.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
Nếu bạn có các giá trị xấp xỉ hàm phân phối tích lũy, thì
67 sẽ hoạt động tố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
Để điền vào các giá trị bị thiếu với mục tiêu âm mưu trơn tru, hãy xem xét
68.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
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
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
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.df1 = df.astype[object].replace[np.nan, 'None']
7Tổng của một chuỗi hoặc cột trống hoặc cột của DataFrame là 0.
df1 = df.astype[object].replace[np.nan, 'None']
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.
df1 = df.astype[object].replace[np.nan, 'None']
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ị
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 đượ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ố 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
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.
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
82 nối tiếp 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
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ự
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
84 như 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
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ụ: 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
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
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]: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
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
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ố
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
90 dưới dạng đối số 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
91. Trong trường hợp này, đối số 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
92 phải được truyền rõ ràng bằng tên hoặc 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
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
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
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ự
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
84 như 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
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ụ: 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
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]:
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
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]:
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. | float |
boolean | 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]. |
float | 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à:
|
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]. | 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à:
|
Điều này có thể thuận tiện nếu bạn không muốn vượt qua
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
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
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
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
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
82 tương tự như 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
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
df1 = df.astype[object].replace[np.nan, 'None']
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ụ,
df1 = df.astype[object].replace[np.nan, 'None']
01 tuyên truyền trong các hoạt động số học, tương tự như 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
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à
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.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,
df1 = df.astype[object].replace[np.nan, 'None']
01 cũng tuyên truyền. Điều này sai lệch so với hành vi của 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
39, trong đó so sánh với 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
39 luôn trả lại df1 = df.astype[object].replace[np.nan, 'None']
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
df1 = df.astype[object].replace[np.nan, 'None']
01 hay không, 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 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,
df1 = df.astype[object].replace[np.nan, 'None']
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 [
df1 = df.astype[object].replace[np.nan, 'None']
19], nếu một trong các toán hạng là df1 = df.astype[object].replace[np.nan, 'None']
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à df1 = df.astype[object].replace[np.nan, 'None']
20 hoặc df1 = df.astype[object].replace[np.nan, 'None']
15]. Trong trường hợp này, df1 = df.astype[object].replace[np.nan, 'None']
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à
df1 = df.astype[object].replace[np.nan, 'None']
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 df1 = df.astype[object].replace[np.nan, 'None']
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 [
df1 = df.astype[object].replace[np.nan, 'None']
27] có thể được lấy bằng cách sử dụng logic tương tự [trong đó bây giờ df1 = df.astype[object].replace[np.nan, 'None']
01 sẽ không tuyên truyền nếu một trong các toán hạng đã được df1 = df.astype[object].replace[np.nan, 'None']
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#
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
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à
df1 = df.astype[object].replace[np.nan, 'None']
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ư df1 = df.astype[object].replace[np.nan, 'None']
32 trong đó df1 = df.astype[object].replace[np.nan, 'None']
33 có khả năng là df1 = df.astype[object].replace[np.nan, 'None']
01. Trong những trường hợp như vậy, 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 có thể được sử dụng để kiểm tra df1 = df.astype[object].replace[np.nan, 'None']
01 hoặc df1 = df.astype[object].replace[np.nan, 'None']
33 là df1 = df.astype[object].replace[np.nan, 'None']
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
df1 = df.astype[object].replace[np.nan, 'None']
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#
df1 = df.astype[object].replace[np.nan, 'None']
40 thực hiện giao thức Numpy từ ____241. Hầu hết các UFUNCS hoạt động với 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 và thường trả 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
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à
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 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
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
39, có các phương thức tiện lợi df1 = df.astype[object].replace[np.nan, 'None']
46 nối tiếp và df1 = df.astype[object].replace[np.nan, 'None']
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ư df1 = df.astype[object].replace[np.nan, 'None']
48 và df1 = df.astype[object].replace[np.nan, 'None']
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 df1 = df.astype[object].replace[np.nan, 'None']
48 and df1 = df.astype[object].replace[np.nan, 'None']
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 2 3 4 dtype: Int640