Đây là phần giới thiệu ngắn về gấu trúc, chủ yếu dành cho người dùng mới. Bạn có thể xem các công thức nấu ăn phức tạp hơn trong
Thông thường, chúng tôi nhập khẩu như sau
In [1]: import numpy as np In [2]: import pandas as pd
tạo đối tượng
xem
Tạo a bằng cách chuyển danh sách giá trị, để gấu trúc tạo chỉ mục số nguyên mặc định
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64
Tạo a bằng cách chuyển một mảng NumPy, với chỉ mục ngày giờ bằng cách sử dụng và các cột được gắn nhãn
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.524988
Tạo một bằng cách chuyển từ điển các đối tượng có thể được chuyển đổi thành cấu trúc giống như chuỗi
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo
Các cột của kết quả có khác nhau
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object
Nếu bạn đang sử dụng IPython, tính năng hoàn thành tab cho tên cột [cũng như thuộc tính công khai] sẽ tự động được bật. Đây là một tập hợp con của các thuộc tính sẽ được hoàn thành
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated
Như bạn có thể thấy, các cột
In [17]: df.to_numpy[] Out[17]: array[[[ 0.4691, -0.2829, -1.5091, -1.1356], [ 1.2121, -0.1732, 0.1192, -1.0442], [-0.8618, -2.1046, -0.4949, 1.0718], [ 0.7216, -0.7068, -1.0396, 0.2719], [-0.425 , 0.567 , 0.2762, -1.0874], [-0.6737, 0.1136, -1.4784, 0.525 ]]]6,
In [17]: df.to_numpy[] Out[17]: array[[[ 0.4691, -0.2829, -1.5091, -1.1356], [ 1.2121, -0.1732, 0.1192, -1.0442], [-0.8618, -2.1046, -0.4949, 1.0718], [ 0.7216, -0.7068, -1.0396, 0.2719], [-0.425 , 0.567 , 0.2762, -1.0874], [-0.6737, 0.1136, -1.4784, 0.525 ]]]7,
In [17]: df.to_numpy[] Out[17]: array[[[ 0.4691, -0.2829, -1.5091, -1.1356], [ 1.2121, -0.1732, 0.1192, -1.0442], [-0.8618, -2.1046, -0.4949, 1.0718], [ 0.7216, -0.7068, -1.0396, 0.2719], [-0.425 , 0.567 , 0.2762, -1.0874], [-0.6737, 0.1136, -1.4784, 0.525 ]]]8 và
In [17]: df.to_numpy[] Out[17]: array[[[ 0.4691, -0.2829, -1.5091, -1.1356], [ 1.2121, -0.1732, 0.1192, -1.0442], [-0.8618, -2.1046, -0.4949, 1.0718], [ 0.7216, -0.7068, -1.0396, 0.2719], [-0.425 , 0.567 , 0.2762, -1.0874], [-0.6737, 0.1136, -1.4784, 0.525 ]]]9 sẽ tự động hoàn thành tab.
In [18]: df2.to_numpy[] Out[18]: array[[[1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo']], dtype=object]0 và
In [18]: df2.to_numpy[] Out[18]: array[[[1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo']], dtype=object]1 cũng ở đó;
Xem dữ liệu
xem
Sử dụng và để xem các hàng trên cùng và dưới cùng của khung tương ứng
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.524988
Hiển thị hoặc
In [15]: df.index Out[15]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [16]: df.columns Out[16]: Index[['A', 'B', 'C', 'D'], dtype='object']
đưa ra một đại diện NumPy của dữ liệu cơ bản. Lưu ý rằng đây có thể là một hoạt động tốn kém khi bạn có các cột với các loại dữ liệu khác nhau, điều này dẫn đến sự khác biệt cơ bản giữa gấu trúc và NumPy. Mảng NumPy có một dtype cho toàn bộ mảng, trong khi pandas DataFrames có một dtype trên mỗi cột. Khi bạn gọi, gấu trúc sẽ tìm thấy NumPy dtype có thể chứa tất cả các dtypes trong DataFrame. Điều này có thể kết thúc bằng
In [18]: df2.to_numpy[] Out[18]: array[[[1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo']], dtype=object]9, yêu cầu truyền mọi giá trị cho một đối tượng Python
Đối với
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6400, tất cả các giá trị dấu phẩy động của chúng tôi, nhanh và không yêu cầu sao chép dữ liệu
In [17]: df.to_numpy[] Out[17]: array[[[ 0.4691, -0.2829, -1.5091, -1.1356], [ 1.2121, -0.1732, 0.1192, -1.0442], [-0.8618, -2.1046, -0.4949, 1.0718], [ 0.7216, -0.7068, -1.0396, 0.2719], [-0.425 , 0.567 , 0.2762, -1.0874], [-0.6737, 0.1136, -1.4784, 0.525 ]]]
Đối với
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6403, với nhiều kiểu chữ, tương đối đắt tiền
In [18]: df2.to_numpy[] Out[18]: array[[[1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'test', 'foo'], [1.0, Timestamp['2013-01-02 00:00:00'], 1.0, 3, 'train', 'foo']], dtype=object]
Ghi chú
không bao gồm nhãn chỉ mục hoặc cột trong đầu ra
hiển thị một bản tóm tắt thống kê nhanh về dữ liệu của bạn
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float640
Chuyển đổi dữ liệu của bạn
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float641
sắp xếp theo một trục
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float642
sắp xếp theo giá trị
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float643
Lựa chọn
Ghi chú
Mặc dù các biểu thức Python/NumPy tiêu chuẩn để chọn và cài đặt là trực quan và hữu ích cho công việc tương tác, nhưng đối với mã sản xuất, chúng tôi khuyên dùng các phương thức truy cập dữ liệu gấu trúc được tối ưu hóa, , , và
Xem tài liệu lập chỉ mục và
Nhận
Chọn một cột duy nhất, mang lại một , tương đương với
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6415
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float644
Chọn qua
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6416 [_______1_______17], sẽ cắt các hàng
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float645
Lựa chọn theo nhãn
Xem thêm trong cách sử dụng hoặc
Để có được một mặt cắt ngang bằng cách sử dụng nhãn
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float646
Chọn trên nhiều trục theo nhãn
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float647
Hiển thị cắt nhãn, bao gồm cả hai điểm cuối
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float648
Giảm kích thước của đối tượng được trả về
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float649
Để có được một giá trị vô hướng
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249880
Để truy cập nhanh vào vô hướng [tương đương với phương pháp trước]
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249881
Lựa chọn theo vị trí
Xem thêm trong cách sử dụng hoặc
Chọn qua vị trí của các số nguyên đã truyền
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249882
Theo các lát số nguyên, hoạt động tương tự như NumPy/Python
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249883
Theo danh sách các vị trí số nguyên, tương tự như kiểu NumPy/Python
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249884
Để cắt các hàng một cách rõ ràng
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249885
Để cắt các cột một cách rõ ràng
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249886
Để nhận được một giá trị rõ ràng
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249887
Để truy cập nhanh vào vô hướng [tương đương với phương pháp trước]
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249888
lập chỉ mục Boolean
Sử dụng các giá trị của một cột để chọn dữ liệu
In [5]: dates = pd.date_range["20130101", periods=6] In [6]: dates Out[6]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [7]: df = pd.DataFrame[np.random.randn[6, 4], index=dates, columns=list["ABCD"]] In [8]: df Out[8]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249889
Chọn các giá trị từ DataFrame khi đáp ứng điều kiện boolean
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo0
Sử dụng phương pháp lọc
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo1
Cài đặt
Đặt cột mới sẽ tự động căn chỉnh dữ liệu theo chỉ mục
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo2
Đặt giá trị theo nhãn
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo3
Đặt giá trị theo vị trí
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo4
Cài đặt bằng cách gán với một mảng NumPy
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo5
Kết quả của các thao tác cài đặt trước
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo6
Thao tác
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6423 với cài đặt
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo7
Dữ liệu bị mất
gấu trúc chủ yếu sử dụng giá trị
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6424 để biểu thị dữ liệu bị thiếu. Theo mặc định, nó không được bao gồm trong tính toán. xem
Lập chỉ mục lại cho phép bạn thay đổi/thêm/xóa chỉ mục trên một trục cụ thể. Điều này trả về một bản sao của dữ liệu
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo8
loại bỏ bất kỳ hàng nào có dữ liệu bị thiếu
In [9]: df2 = pd.DataFrame[ ...: { ...: "A": 1.0, ...: "B": pd.Timestamp["20130102"], ...: "C": pd.Series[1, index=list[range[4]], dtype="float32"], ...: "D": np.array[[3] * 4, dtype="int32"], ...: "E": pd.Categorical[["test", "train", "test", "train"]], ...: "F": "foo", ...: } ...: ] ...: In [10]: df2 Out[10]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo9
điền dữ liệu còn thiếu
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object0
lấy mặt nạ boolean trong đó các giá trị là
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6428
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object1
hoạt động
xem
số liệu thống kê
Các hoạt động nói chung loại trừ dữ liệu bị thiếu
Thực hiện thống kê mô tả
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object2
Hoạt động tương tự trên trục khác
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object3
Vận hành với các đối tượng có kích thước khác nhau và cần căn chỉnh. Ngoài ra, gấu trúc tự động phát sóng theo kích thước đã chỉ định
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object4
Áp dụng
áp dụng chức năng do người dùng xác định cho dữ liệu
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object5
lập biểu đồ
Xem thêm tại
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object6
Phương thức chuỗi
Series được trang bị một tập hợp các phương thức xử lý chuỗi trong thuộc tính
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6430 giúp dễ dàng thao tác trên từng phần tử của mảng, như trong đoạn mã dưới đây. Lưu ý rằng khớp mẫu trong
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6430 thường sử dụng các biểu thức chính quy theo mặc định [và trong một số trường hợp luôn sử dụng chúng]. Xem thêm tại
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object7
hợp nhất
concat
gấu trúc cung cấp nhiều phương tiện khác nhau để dễ dàng kết hợp các đối tượng Sê-ri và DataFrame với nhiều loại logic thiết lập khác nhau cho các chỉ mục và chức năng đại số quan hệ trong trường hợp hoạt động kiểu nối/hợp nhất
xem
Nối các đối tượng gấu trúc với nhau dọc theo một trục với
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object8
Ghi chú
Thêm một cột vào một tương đối nhanh. Tuy nhiên, thêm một hàng yêu cầu một bản sao và có thể tốn kém. Chúng tôi khuyên bạn nên chuyển một danh sách các bản ghi được tạo sẵn cho hàm tạo thay vì xây dựng một bằng cách nối thêm các bản ghi vào nó
Tham gia
cho phép các kiểu nối kiểu SQL dọc theo các cột cụ thể. xem phần
In [11]: df2.dtypes Out[11]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object9
Một ví dụ khác có thể được đưa ra là
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated0
nhóm
Theo nhóm theo nhóm, chúng tôi đang đề cập đến một quy trình liên quan đến một hoặc nhiều bước sau
Chia dữ liệu thành các nhóm dựa trên một số tiêu chí
Áp dụng một chức năng cho từng nhóm một cách độc lập
Kết hợp các kết quả thành một cấu trúc dữ liệu
xem
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated1
Nhóm và sau đó áp dụng chức năng cho các nhóm kết quả
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated2
Nhóm theo nhiều cột tạo thành một chỉ mục phân cấp và một lần nữa chúng ta có thể áp dụng hàm
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated3
định hình lại
Xem các phần trên và
Cây rơm
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated4
Phương thức “nén” một mức trong các cột của DataFrame
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated5
Với một DataFrame hoặc Sê-ri "được xếp chồng lên nhau" [có a là
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6441], phép toán nghịch đảo của is , theo mặc định, sẽ giải phóng cấp độ cuối cùng
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated6
bảng tổng hợp
Xem phần trên
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated7
trục a chỉ định
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6446,
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6441 và
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6448
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated8
Chuỗi thời gian
pandas có chức năng đơn giản, mạnh mẽ và hiệu quả để thực hiện các thao tác lấy mẫu lại trong quá trình chuyển đổi tần số [e. g. , chuyển đổi dữ liệu thứ hai thành dữ liệu 5 phút]. Điều này cực kỳ phổ biến trong nhưng không giới hạn ở các ứng dụng tài chính. xem
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns df2.align df2.copy df2.all df2.count df2.any df2.combine df2.append df2.D df2.apply df2.describe df2.applymap df2.diff df2.B df2.duplicated9
bản địa hóa một chuỗi thời gian thành một múi giờ
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249880
chuyển đổi chuỗi thời gian nhận biết múi giờ sang múi giờ khác
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249881
Chuyển đổi giữa các biểu diễn khoảng thời gian
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249882
Chuyển đổi giữa thời gian và dấu thời gian cho phép sử dụng một số hàm số học thuận tiện. Trong ví dụ sau, chúng tôi chuyển đổi tần suất theo quý có năm kết thúc vào tháng 11 thành 9 giờ sáng của cuối tháng sau khi kết thúc quý
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249883
phân loại
gấu trúc có thể bao gồm dữ liệu phân loại trong một. Để có tài liệu đầy đủ, hãy xem và
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249884
Chuyển đổi các điểm thô thành kiểu dữ liệu phân loại
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249885
Đổi tên các danh mục thành tên có ý nghĩa hơn
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249886
Sắp xếp lại các danh mục và đồng thời thêm các danh mục còn thiếu [các phương thức theo mặc định trả về một cái mới]
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249887
Sắp xếp theo thứ tự trong danh mục, không theo thứ tự từ vựng
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249888
Nhóm theo cột phân loại cũng hiển thị các danh mục trống
In [13]: df.head[] Out[13]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 In [14]: df.tail[3] Out[14]: A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249889
âm mưu
xem tài liệu
Chúng tôi sử dụng quy ước chuẩn để tham khảo API matplotlib
In [15]: df.index Out[15]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [16]: df.columns Out[16]: Index[['A', 'B', 'C', 'D'], dtype='object']0
Phương pháp
In [3]: s = pd.Series[[1, 3, 5, np.nan, 6, 8]] In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float6454 được sử dụng để đóng cửa sổ hình
In [15]: df.index Out[15]: DatetimeIndex[['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D'] In [16]: df.columns Out[16]: Index[['A', 'B', 'C', 'D'], dtype='object']1
Nếu chạy dưới Jupyter Notebook, cốt truyện sẽ xuất hiện trên. Nếu không thì sử dụng matplotlib. pyplot. show để hiển thị nó hoặc matplotlib. pyplot. savefig để ghi nó vào một tập tin