Python Pandas - Hướng dẫn nhanh
Pandas là một Thư viện Python mã nguồn mở cung cấp công cụ phân tích và thao tác dữ liệu hiệu suất cao bằng cách sử dụng các cấu trúc dữ liệu mạnh mẽ của nó. Cái tên Pandas có nguồn gốc từ từ Panel Data - một Kinh tế lượng từ dữ liệu Đa chiều.
Năm 2008, nhà phát triển Wes McKinney bắt đầu phát triển gấu trúc khi cần công cụ phân tích dữ liệu hiệu suất cao, linh hoạt.
Trước Pandas, Python chủ yếu được sử dụng để trộn và chuẩn bị dữ liệu. Nó có rất ít đóng góp vào việc phân tích dữ liệu. Pandas đã giải quyết vấn đề này. Sử dụng Pandas, chúng ta có thể thực hiện năm bước điển hình trong quá trình xử lý và phân tích dữ liệu, bất kể nguồn gốc của dữ liệu - tải, chuẩn bị, thao tác, lập mô hình và phân tích.
Python with Pandas được sử dụng trong nhiều lĩnh vực bao gồm lĩnh vực học thuật và thương mại bao gồm tài chính, kinh tế, Thống kê, phân tích, v.v.
Đặc điểm chính của gấu trúc
- Đối tượng DataFrame nhanh và hiệu quả với lập chỉ mục mặc định và tùy chỉnh.
- Các công cụ để tải dữ liệu vào các đối tượng dữ liệu trong bộ nhớ từ các định dạng tệp khác nhau.
- Căn chỉnh dữ liệu và tích hợp xử lý dữ liệu bị thiếu.
- Định hình lại và xoay vòng các nhóm ngày.
- Cắt dựa trên nhãn, lập chỉ mục và tập hợp con các tập dữ liệu lớn.
- Có thể xóa hoặc chèn các cột từ cấu trúc dữ liệu.
- Nhóm theo dữ liệu để tổng hợp và biến đổi.
- Kết hợp và kết hợp dữ liệu hiệu suất cao.
- Chức năng Chuỗi thời gian.
Phân phối Python chuẩn không đi kèm với mô-đun Pandas. Một giải pháp thay thế nhẹ là cài đặt NumPy bằng trình cài đặt gói Python phổ biến,pip.
pip install pandas
Nếu bạn cài đặt gói Anaconda Python, Pandas sẽ được cài đặt theo mặc định với những điều sau:
các cửa sổ
Anaconda (từ https://www.continuum.io) là một bản phân phối Python miễn phí cho ngăn xếp SciPy. Nó cũng có sẵn cho Linux và Mac.
Canopy (https://www.enthought.com/products/canopy/) có sẵn miễn phí cũng như phân phối thương mại với ngăn xếp SciPy đầy đủ cho Windows, Linux và Mac.
Python(x, y) là bản phân phối Python miễn phí với ngăn xếp SciPy và Spyder IDE dành cho hệ điều hành Windows. (Có thể tải xuống từhttp://python-xy.github.io/)
Linux
Trình quản lý gói của các bản phân phối Linux tương ứng được sử dụng để cài đặt một hoặc nhiều gói trong ngăn xếp SciPy.
For Ubuntu Users
sudo apt-get install python-numpy python-scipy python-matplotlibipythonipythonnotebook
python-pandas python-sympy python-nose
For Fedora Users
sudo yum install numpyscipy python-matplotlibipython python-pandas sympy
python-nose atlas-devel
Gấu trúc xử lý ba cấu trúc dữ liệu sau:
- Series
- DataFrame
- Panel
Các cấu trúc dữ liệu này được xây dựng trên mảng Numpy, có nghĩa là chúng rất nhanh.
Kích thước & Mô tả
Cách tốt nhất để nghĩ về các cấu trúc dữ liệu này là cấu trúc dữ liệu chiều cao hơn là một vùng chứa cấu trúc dữ liệu chiều thấp hơn của nó. Ví dụ, DataFrame là vùng chứa của Series, Panel là vùng chứa của DataFrame.
Cấu trúc dữ liệu | Kích thước | Sự miêu tả |
---|---|---|
Loạt | 1 | Mảng đồng nhất có nhãn 1D, có thể thay đổi kích thước. |
Khung dữ liệu | 2 | Cấu trúc dạng bảng có nhãn 2D chung, có thể thay đổi kích thước với các cột có thể được nhập không đồng nhất. |
Bảng điều khiển | 3 | Mảng có thể thay đổi kích thước, được gắn nhãn 3D chung. |
Việc xây dựng và xử lý mảng hai hay nhiều chiều là một công việc tẻ nhạt, người dùng phải cân nhắc hướng của tập dữ liệu khi viết hàm. Nhưng sử dụng cấu trúc dữ liệu Pandas, nỗ lực tinh thần của người dùng bị giảm đi.
Ví dụ: với dữ liệu dạng bảng (DataFrame), sẽ hữu ích hơn về mặt ngữ nghĩa khi nghĩ về index (các hàng) và columns chứ không phải trục 0 và trục 1.
Tính đột biến
Tất cả cấu trúc dữ liệu Pandas đều có thể thay đổi giá trị (có thể thay đổi) và ngoại trừ Chuỗi tất cả đều có thể thay đổi kích thước. Dòng là kích thước bất biến.
Note- DataFrame được sử dụng rộng rãi và là một trong những cấu trúc dữ liệu quan trọng nhất. Bảng điều khiển được sử dụng ít hơn nhiều.
Loạt
Chuỗi là một mảng một chiều giống như cấu trúc với dữ liệu đồng nhất. Ví dụ: chuỗi sau là tập hợp các số nguyên 10, 23, 56,…
10 | 23 | 56 | 17 | 52 | 61 | 73 | 90 | 26 | 72 |
Những điểm chính
- Dữ liệu đồng nhất
- Kích thước bất biến
- Giá trị của dữ liệu có thể thay đổi
Khung dữ liệu
DataFrame là một mảng hai chiều với dữ liệu không đồng nhất. Ví dụ,
Tên | Tuổi tác | Giới tính | Xếp hạng |
---|---|---|---|
Steve | 32 | Nam giới | 3,45 |
Lia | 28 | Giống cái | 4,6 |
Vin | 45 | Nam giới | 3,9 |
Katie | 38 | Giống cái | 2,78 |
Bảng này đại diện cho dữ liệu của nhóm bán hàng của một tổ chức với xếp hạng hiệu suất tổng thể của họ. Dữ liệu được biểu diễn trong các hàng và cột. Mỗi cột đại diện cho một thuộc tính và mỗi hàng đại diện cho một người.
Loại dữ liệu của các cột
Các kiểu dữ liệu của bốn cột như sau:
Cột | Kiểu |
---|---|
Tên | Chuỗi |
Tuổi tác | Số nguyên |
Giới tính | Chuỗi |
Xếp hạng | Phao nổi |
Những điểm chính
- Dữ liệu không đồng nhất
- Kích thước có thể thay đổi
- Dữ liệu có thể thay đổi
Bảng điều khiển
Panel là một cấu trúc dữ liệu ba chiều với dữ liệu không đồng nhất. Thật khó để biểu diễn bảng điều khiển bằng biểu diễn đồ họa. Nhưng một bảng điều khiển có thể được minh họa như một vùng chứa DataFrame.
Những điểm chính
- Dữ liệu không đồng nhất
- Kích thước có thể thay đổi
- Dữ liệu có thể thay đổi
Chuỗi là mảng có nhãn một chiều có khả năng chứa dữ liệu thuộc bất kỳ kiểu nào (đối tượng số nguyên, chuỗi, float, python, v.v.). Các nhãn trục được gọi chung là chỉ mục.
gấu trúc.Series
Chuỗi gấu trúc có thể được tạo bằng cách sử dụng hàm tạo sau:
pandas.Series( data, index, dtype, copy)
Các tham số của hàm tạo như sau:
Sr.No | Mô tả về Thông Số |
---|---|
1 | data dữ liệu có nhiều dạng khác nhau như ndarray, danh sách, hằng số |
2 | index Giá trị chỉ mục phải là duy nhất và có thể băm, cùng độ dài với dữ liệu. Mặc địnhnp.arange(n) nếu không có chỉ mục nào được thông qua. |
3 | dtype dtype dành cho kiểu dữ liệu. Nếu Không, kiểu dữ liệu sẽ được suy ra |
4 | copy Sao chép dữ liệu. Sai mặc định |
Một chuỗi có thể được tạo bằng cách sử dụng các đầu vào khác nhau như -
- Array
- Dict
- Giá trị vô hướng hoặc hằng số
Tạo một chuỗi trống
Một loạt cơ bản, có thể được tạo là một loạt trống.
Thí dụ
#import the pandas library and aliasing as pd
import pandas as pd
s = pd.Series()
print s
Nó là output như sau -
Series([], dtype: float64)
Tạo một chuỗi từ ndarray
Nếu dữ liệu là một mảng ndarray, thì chỉ mục được truyền phải có cùng độ dài. Nếu không có chỉ mục nào được chuyển, thì theo mặc định, chỉ mục sẽ làrange(n) Ở đâu n là độ dài mảng, tức là, [0,1,2,3…. range(len(array))-1].
ví dụ 1
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)
print s
Nó là output như sau -
0 a
1 b
2 c
3 d
dtype: object
Chúng tôi đã không chuyển bất kỳ chỉ mục nào, vì vậy theo mặc định, nó đã gán các chỉ mục từ 0 đến len(data)-1, tức là, 0 đến 3.
Ví dụ 2
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,101,102,103])
print s
Nó là output như sau -
100 a
101 b
102 c
103 d
dtype: object
Chúng tôi đã chuyển các giá trị chỉ mục ở đây. Bây giờ chúng ta có thể thấy các giá trị được lập chỉ mục tùy chỉnh trong đầu ra.
Tạo một chuỗi từ dict
A dictcó thể được chuyển dưới dạng đầu vào và nếu không có chỉ mục nào được chỉ định, thì các khóa từ điển được lấy theo thứ tự được sắp xếp để xây dựng chỉ mục. Nếuindex được chuyển, các giá trị trong dữ liệu tương ứng với các nhãn trong chỉ mục sẽ được kéo ra.
ví dụ 1
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print s
Nó là output như sau -
a 0.0
b 1.0
c 2.0
dtype: float64
Observe - Các khóa từ điển được sử dụng để xây dựng chỉ mục.
Ví dụ 2
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print s
Nó là output như sau -
b 1.0
c 2.0
d NaN
a 0.0
dtype: float64
Observe - Thứ tự chỉ mục được duy trì và phần tử bị thiếu được điền bằng NaN (Không phải là Số).
Tạo một chuỗi từ Scalar
Nếu dữ liệu là một giá trị vô hướng, một chỉ mục phải được cung cấp. Giá trị sẽ được lặp lại để khớp với độ dài củaindex
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print s
Nó là output như sau -
0 5
1 5
2 5
3 5
dtype: int64
Truy cập dữ liệu từ chuỗi có vị trí
Dữ liệu trong chuỗi có thể được truy cập tương tự như trong ndarray.
ví dụ 1
Truy xuất phần tử đầu tiên. Như chúng ta đã biết, việc đếm bắt đầu từ 0 cho mảng, có nghĩa là phần tử đầu tiên được lưu trữ ở vị trí thứ 0 , v.v.
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
#retrieve the first element
print s[0]
Nó là output như sau -
1
Ví dụ 2
Truy xuất ba phần tử đầu tiên trong Chuỗi. Nếu một: được chèn trước nó, tất cả các mục từ chỉ mục đó trở đi sẽ được trích xuất. Nếu hai tham số (với: giữa chúng) được sử dụng, các mục giữa hai chỉ mục (không bao gồm chỉ mục dừng)
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
#retrieve the first three element
print s[:3]
Nó là output như sau -
a 1
b 2
c 3
dtype: int64
Ví dụ 3
Truy xuất ba phần tử cuối cùng.
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
#retrieve the last three element
print s[-3:]
Nó là output như sau -
c 3
d 4
e 5
dtype: int64
Lấy dữ liệu bằng nhãn (chỉ mục)
A Series giống như một kích thước cố định dict trong đó bạn có thể lấy và đặt các giá trị theo nhãn chỉ mục.
ví dụ 1
Truy xuất một phần tử đơn lẻ bằng giá trị nhãn chỉ mục.
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
#retrieve a single element
print s['a']
Nó là output như sau -
1
Ví dụ 2
Truy xuất nhiều phần tử bằng cách sử dụng danh sách các giá trị nhãn chỉ mục.
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
#retrieve multiple elements
print s[['a','c','d']]
Nó là output như sau -
a 1
c 3
d 4
dtype: int64
Ví dụ 3
Nếu một nhãn không được chứa, một ngoại lệ sẽ được đưa ra.
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
#retrieve multiple elements
print s['f']
Nó là output như sau -
…
KeyError: 'f'
Khung dữ liệu là một cấu trúc dữ liệu hai chiều, tức là dữ liệu được căn chỉnh theo kiểu bảng trong các hàng và cột.
Các tính năng của DataFrame
- Các cột tiềm năng có nhiều loại khác nhau
- Kích thước - Có thể thay đổi
- Các trục được gắn nhãn (hàng và cột)
- Có thể thực hiện các phép toán số học trên các hàng và cột
Kết cấu
Giả sử rằng chúng ta đang tạo một khung dữ liệu với dữ liệu của học sinh.
Bạn có thể coi nó như một bảng SQL hoặc một biểu diễn dữ liệu bảng tính.
gấu trúc.DataFrame
Một DataFrame gấu trúc có thể được tạo bằng cách sử dụng hàm tạo sau:
pandas.DataFrame( data, index, columns, dtype, copy)
Các tham số của hàm tạo như sau:
Sr.No | Mô tả về Thông Số |
---|---|
1 | data dữ liệu có nhiều dạng khác nhau như ndarray, chuỗi, bản đồ, danh sách, dict, hằng số và cả một DataFrame khác. |
2 | index Đối với các nhãn hàng, Chỉ mục được sử dụng cho khung kết quả là Mặc định tùy chọn np.arange (n) nếu không có chỉ mục nào được chuyển qua. |
3 | columns Đối với nhãn cột, cú pháp mặc định tùy chọn là - np.arange (n). Điều này chỉ đúng nếu không có chỉ mục nào được thông qua. |
4 | dtype Kiểu dữ liệu của mỗi cột. |
5 | copy Lệnh này (hoặc bất kỳ lệnh nào) được sử dụng để sao chép dữ liệu, nếu giá trị mặc định là Sai. |
Tạo DataFrame
Một DataFrame gấu trúc có thể được tạo bằng các đầu vào khác nhau như -
- Lists
- dict
- Series
- Numpy ndarrays
- DataFrame khác
Trong các phần tiếp theo của chương này, chúng ta sẽ xem cách tạo DataFrame bằng cách sử dụng các đầu vào này.
Tạo một DataFrame trống
Một DataFrame cơ bản, có thể được tạo là một Dataframe rỗng.
Thí dụ
#import the pandas library and aliasing as pd
import pandas as pd
df = pd.DataFrame()
print df
Nó là output như sau -
Empty DataFrame
Columns: []
Index: []
Tạo DataFrame từ danh sách
DataFrame có thể được tạo bằng cách sử dụng một danh sách hoặc một danh sách.
ví dụ 1
import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df
Nó là output như sau -
0
0 1
1 2
2 3
3 4
4 5
Ví dụ 2
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print df
Nó là output như sau -
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13
Ví dụ 3
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print df
Nó là output như sau -
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0
Note - Quan sát, dtype tham số thay đổi loại cột Tuổi thành dấu phẩy động.
Tạo DataFrame từ Dict of ndarrays / Lists
Tất cả ndarraysphải có cùng độ dài. Nếu chỉ mục được thông qua, thì độ dài của chỉ mục phải bằng độ dài của mảng.
Nếu không có chỉ mục nào được chuyển, thì theo mặc định, chỉ mục sẽ là range (n), trong đó n là độ dài mảng.
ví dụ 1
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print df
Nó là output như sau -
Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky
Note- Quan sát các giá trị 0,1,2,3. Chúng là chỉ mục mặc định được chỉ định cho mỗi bằng cách sử dụng phạm vi hàm (n).
Ví dụ 2
Bây giờ chúng ta hãy tạo một DataFrame được lập chỉ mục bằng cách sử dụng các mảng.
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print df
Nó là output như sau -
Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky
Note - Quan sát, index tham số chỉ định một chỉ mục cho mỗi hàng.
Tạo một DataFrame từ Danh sách các Hành vi
Danh sách Từ điển có thể được chuyển làm dữ liệu đầu vào để tạo DataFrame. Các khóa từ điển theo mặc định được lấy làm tên cột.
ví dụ 1
Ví dụ sau đây cho thấy cách tạo DataFrame bằng cách chuyển một danh sách các từ điển.
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print df
Nó là output như sau -
a b c
0 1 2 NaN
1 5 10 20.0
Note - Hãy quan sát, NaN (Không phải là Số) được thêm vào ở những vùng bị thiếu.
Ví dụ 2
Ví dụ sau đây cho thấy cách tạo DataFrame bằng cách chuyển danh sách các từ điển và các chỉ mục hàng.
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print df
Nó là output như sau -
a b c
first 1 2 NaN
second 5 10 20.0
Ví dụ 3
Ví dụ sau đây cho thấy cách tạo DataFrame với danh sách các từ điển, chỉ mục hàng và chỉ mục cột.
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
#With two column indices, values same as dictionary keys
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])
#With two column indices with one index with other name
df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print df1
print df2
Nó là output như sau -
#df1 output
a b
first 1 2
second 5 10
#df2 output
a b1
first 1 NaN
second 5 NaN
Note- Quan sát, df2 DataFrame được tạo bằng chỉ mục cột khác với khóa từ điển; do đó, đã nối NaN's tại chỗ. Trong khi đó, df1 được tạo với các chỉ mục cột giống như các khóa từ điển, vì vậy NaN được thêm vào.
Tạo DataFrame từ Dict of Series
Dictionary of Series có thể được chuyển để tạo thành DataFrame. Chỉ mục kết quả là sự kết hợp của tất cả các chỉ mục chuỗi được chuyển qua.
Thí dụ
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print df
Nó là output như sau -
one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
Note - Quan sát, đối với bộ truyện một, không có nhãn ‘d’ đã vượt qua, nhưng kết quả là d nhãn, NaN được nối với NaN.
Hãy để chúng tôi hiểu column selection, additionvà deletion thông qua các ví dụ.
Lựa chọn cột
Chúng tôi sẽ hiểu điều này bằng cách chọn một cột từ DataFrame.
Thí dụ
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print df ['one']
Nó là output như sau -
a 1.0
b 2.0
c 3.0
d NaN
Name: one, dtype: float64
Bổ sung cột
Chúng tôi sẽ hiểu điều này bằng cách thêm một cột mới vào khung dữ liệu hiện có.
Thí dụ
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
# Adding a new column to an existing DataFrame object with column label by passing new series
print ("Adding a new column by passing as Series:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print df
print ("Adding a new column using the existing columns in DataFrame:")
df['four']=df['one']+df['three']
print df
Nó là output như sau -
Adding a new column by passing as Series:
one two three
a 1.0 1 10.0
b 2.0 2 20.0
c 3.0 3 30.0
d NaN 4 NaN
Adding a new column using the existing columns in DataFrame:
one two three four
a 1.0 1 10.0 11.0
b 2.0 2 20.0 22.0
c 3.0 3 30.0 33.0
d NaN 4 NaN NaN
Xóa cột
Các cột có thể bị xóa hoặc xuất hiện; hãy để chúng tôi lấy một ví dụ để hiểu làm thế nào.
Thí dụ
# Using the previous DataFrame, we will delete a column
# using del function
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
'three' : pd.Series([10,20,30], index=['a','b','c'])}
df = pd.DataFrame(d)
print ("Our dataframe is:")
print df
# using del function
print ("Deleting the first column using DEL function:")
del df['one']
print df
# using pop function
print ("Deleting another column using POP function:")
df.pop('two')
print df
Nó là output như sau -
Our dataframe is:
one three two
a 1.0 10.0 1
b 2.0 20.0 2
c 3.0 30.0 3
d NaN NaN 4
Deleting the first column using DEL function:
three two
a 10.0 1
b 20.0 2
c 30.0 3
d NaN 4
Deleting another column using POP function:
three
a 10.0
b 20.0
c 30.0
d NaN
Chọn hàng, bổ sung và xóa
Bây giờ chúng ta sẽ hiểu việc chọn, thêm và xóa hàng thông qua các ví dụ. Chúng ta hãy bắt đầu với khái niệm lựa chọn.
Lựa chọn theo nhãn
Hàng có thể được chọn bằng cách chuyển nhãn hàng cho một loc chức năng.
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print df.loc['b']
Nó là output như sau -
one 2.0
two 2.0
Name: b, dtype: float64
Kết quả là một chuỗi có nhãn là tên cột của DataFrame. Và, Tên của chuỗi là nhãn mà nó được truy xuất.
Lựa chọn theo vị trí số nguyên
Các hàng có thể được chọn bằng cách chuyển vị trí số nguyên đến một iloc chức năng.
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print df.iloc[2]
Nó là output như sau -
one 3.0
two 3.0
Name: c, dtype: float64
Hàng lát
Có thể chọn nhiều hàng bằng toán tử ':'.
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print df[2:4]
Nó là output như sau -
one two
c 3.0 3
d NaN 4
Bổ sung hàng
Thêm hàng mới vào DataFrame bằng cách sử dụng appendchức năng. Hàm này sẽ nối các hàng ở cuối.
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
print df
Nó là output như sau -
a b
0 1 2
1 3 4
0 5 6
1 7 8
Xóa hàng
Sử dụng nhãn chỉ mục để xóa hoặc bỏ các hàng khỏi DataFrame. Nếu nhãn bị trùng lặp, thì nhiều hàng sẽ bị loại bỏ.
Nếu bạn quan sát, trong ví dụ trên, các nhãn bị trùng lặp. Hãy để chúng tôi thả một nhãn và sẽ xem có bao nhiêu hàng sẽ bị loại bỏ.
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
# Drop rows with label 0
df = df.drop(0)
print df
Nó là output như sau -
a b
1 3 4
1 7 8
Trong ví dụ trên, hai hàng đã bị loại bỏ vì hai hàng đó chứa cùng nhãn 0.
A panellà một vùng chứa dữ liệu 3D. Thời hạnPanel data có nguồn gốc từ kinh tế lượng và chịu trách nhiệm một phần cho cái tên gấu trúc - pan(el)-da(ta)-S.
Tên của 3 trục nhằm cung cấp một số ý nghĩa ngữ nghĩa để mô tả các hoạt động liên quan đến dữ liệu bảng điều khiển. Họ là -
items - trục 0, mỗi mục tương ứng với một DataFrame chứa bên trong.
major_axis - trục 1, nó là chỉ mục (hàng) của mỗi DataFrames.
minor_axis - trục 2, nó là các cột của mỗi DataFrames.
pandas.Panel ()
Một Panel có thể được tạo bằng cách sử dụng hàm tạo sau:
pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)
Các tham số của hàm tạo như sau:
Tham số | Sự miêu tả |
---|---|
dữ liệu | Dữ liệu có nhiều dạng khác nhau như ndarray, chuỗi, bản đồ, danh sách, dict, hằng số và cả một DataFrame khác |
mặt hàng | trục = 0 |
Trục chính | trục = 1 |
tiểu_axis | trục = 2 |
dtype | Kiểu dữ liệu của mỗi cột |
sao chép | Sao chép dữ liệu. Mặc định,false |
Tạo bảng điều khiển
Một Panel có thể được tạo bằng nhiều cách như -
- Từ ndarrays
- Từ dict of DataFrames
Từ 3D ndarray
# creating an empty panel
import pandas as pd
import numpy as np
data = np.random.rand(2,4,5)
p = pd.Panel(data)
print p
Nó là output như sau -
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: 0 to 1
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 4
Note - Quan sát kích thước của bảng trống và bảng trên, các đồ vật đều khác nhau.
Từ dict của Đối tượng DataFrame
#creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p
Nó là output như sau -
Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 2
Tạo một bảng trống
Một bảng trống có thể được tạo bằng cách sử dụng hàm tạo Bảng như sau:
#creating an empty panel
import pandas as pd
p = pd.Panel()
print p
Nó là output như sau -
<class 'pandas.core.panel.Panel'>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None
Chọn dữ liệu từ bảng điều khiển
Chọn dữ liệu từ bảng bằng cách sử dụng -
- Items
- Major_axis
- Minor_axis
Sử dụng các mặt hàng
# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p['Item1']
Nó là output như sau -
0 1 2
0 0.488224 -0.128637 0.930817
1 0.417497 0.896681 0.576657
2 -2.775266 0.571668 0.290082
3 -0.400538 -0.144234 1.110535
Chúng tôi có hai mục và chúng tôi đã truy xuất mục1. Kết quả là một DataFrame có 4 hàng và 3 cột, làMajor_axis và Minor_axis kích thước.
Sử dụng major_axis
Dữ liệu có thể được truy cập bằng phương pháp panel.major_axis(index).
# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.major_xs(1)
Nó là output như sau -
Item1 Item2
0 0.417497 0.748412
1 0.896681 -0.557322
2 0.576657 NaN
Sử dụng small_axis
Dữ liệu có thể được truy cập bằng phương pháp panel.minor_axis(index).
# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.minor_xs(1)
Nó là output như sau -
Item1 Item2
0 -0.128637 -1.047032
1 0.896681 -0.557322
2 0.571668 0.431953
3 -0.144234 1.302466
Note - Quan sát sự thay đổi của các kích thước.
Bây giờ, chúng ta đã tìm hiểu về ba cấu trúc dữ liệu Pandas và cách tạo chúng. Chúng ta sẽ chủ yếu tập trung vào các đối tượng DataFrame vì tầm quan trọng của nó trong việc xử lý dữ liệu thời gian thực và cũng thảo luận về một vài DataStructures khác.
Chức năng cơ bản của dòng
Sr.No. | Thuộc tính hoặc Phương pháp & Mô tả |
---|---|
1 | axes Trả về danh sách các nhãn trục hàng |
2 | dtype Trả về kiểu của đối tượng. |
3 | empty Trả về True nếu chuỗi trống. |
4 | ndim Trả về số thứ nguyên của dữ liệu cơ bản, theo định nghĩa 1. |
5 | size Trả về số phần tử trong dữ liệu cơ bản. |
6 | values Trả về Chuỗi dưới dạng ndarray. |
7 | head() Trả về n hàng đầu tiên. |
số 8 | tail() Trả về n hàng cuối cùng. |
Bây giờ chúng ta hãy tạo một Chuỗi và xem tất cả hoạt động thuộc tính được lập bảng ở trên.
Thí dụ
import pandas as pd
import numpy as np
#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print s
Nó là output như sau -
0 0.967853
1 -0.148368
2 -1.395906
3 -1.758394
dtype: float64
rìu
Trả về danh sách các nhãn của chuỗi.
import pandas as pd
import numpy as np
#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("The axes are:")
print s.axes
Nó là output như sau -
The axes are:
[RangeIndex(start=0, stop=4, step=1)]
Kết quả trên là một định dạng nhỏ gọn của danh sách các giá trị từ 0 đến 5, tức là [0,1,2,3,4].
trống
Trả về giá trị Boolean cho biết Đối tượng có trống hay không. True chỉ ra rằng đối tượng trống.
import pandas as pd
import numpy as np
#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("Is the Object empty?")
print s.empty
Nó là output như sau -
Is the Object empty?
False
ndim
Trả về số kích thước của đối tượng. Theo định nghĩa, Chuỗi là cấu trúc dữ liệu 1D, vì vậy nó trả về
import pandas as pd
import numpy as np
#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s
print ("The dimensions of the object:")
print s.ndim
Nó là output như sau -
0 0.175898
1 0.166197
2 -0.609712
3 -1.377000
dtype: float64
The dimensions of the object:
1
kích thước
Trả về kích thước (chiều dài) của chuỗi.
import pandas as pd
import numpy as np
#Create a series with 4 random numbers
s = pd.Series(np.random.randn(2))
print s
print ("The size of the object:")
print s.size
Nó là output như sau -
0 3.078058
1 -1.207803
dtype: float64
The size of the object:
2
giá trị
Trả về dữ liệu thực tế trong chuỗi dưới dạng mảng.
import pandas as pd
import numpy as np
#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s
print ("The actual data series is:")
print s.values
Nó là output như sau -
0 1.787373
1 -0.605159
2 0.180477
3 -0.140922
dtype: float64
The actual data series is:
[ 1.78737302 -0.60515881 0.18047664 -0.1409218 ]
Đầu & Đuôi
Để xem một mẫu nhỏ của một Series hoặc đối tượng DataFrame, hãy sử dụng phương thức head () và tail ().
head() trả về đầu tiên nhàng (quan sát các giá trị chỉ số). Số phần tử mặc định để hiển thị là năm phần tử, nhưng bạn có thể chuyển một số tùy chỉnh.
import pandas as pd
import numpy as np
#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s
print ("The first two rows of the data series:")
print s.head(2)
Nó là output như sau -
The original series is:
0 0.720876
1 -0.765898
2 0.479221
3 -0.139547
dtype: float64
The first two rows of the data series:
0 0.720876
1 -0.765898
dtype: float64
tail() trả về cuối cùng nhàng (quan sát các giá trị chỉ số). Số phần tử mặc định để hiển thị là năm phần tử, nhưng bạn có thể chuyển một số tùy chỉnh.
import pandas as pd
import numpy as np
#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s
print ("The last two rows of the data series:")
print s.tail(2)
Nó là output như sau -
The original series is:
0 -0.655091
1 -0.881407
2 -0.608592
3 -2.341413
dtype: float64
The last two rows of the data series:
2 -0.608592
3 -2.341413
dtype: float64
Chức năng cơ bản của DataFrame
Bây giờ chúng ta hãy hiểu Chức năng Cơ bản của DataFrame là gì. Các bảng sau liệt kê các thuộc tính hoặc phương pháp quan trọng trợ giúp trong Chức năng Cơ bản của DataFrame.
Sr.No. | Thuộc tính hoặc Phương pháp & Mô tả |
---|---|
1 | T Chuyển đổi hàng và cột. |
2 | axes Trả về danh sách có nhãn trục hàng và nhãn trục cột là thành viên duy nhất. |
3 | dtypes Trả về các kiểu trong đối tượng này. |
4 | empty Đúng nếu NDFrame hoàn toàn trống [không có mục]; nếu bất kỳ trục nào có độ dài bằng 0. |
5 | ndim Số trục / kích thước mảng. |
6 | shape Trả về một bộ giá trị đại diện cho kích thước của DataFrame. |
7 | size Số phần tử trong NDFrame. |
số 8 | values Đại diện khó hiểu của NDFrame. |
9 | head() Trả về n hàng đầu tiên. |
10 | tail() Trả về n hàng cuối cùng. |
Bây giờ chúng ta hãy tạo một DataFrame và xem tất cả các thuộc tính được đề cập ở trên hoạt động như thế nào.
Thí dụ
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data series is:")
print df
Nó là output như sau -
Our data series is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
T (Transpose)
Trả về chuyển vị của DataFrame. Các hàng và cột sẽ hoán đổi cho nhau.
import pandas as pd
import numpy as np
# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
# Create a DataFrame
df = pd.DataFrame(d)
print ("The transpose of the data series is:")
print df.T
Nó là output như sau -
The transpose of the data series is:
0 1 2 3 4 5 6
Age 25 26 25 23 30 29 23
Name Tom James Ricky Vin Steve Smith Jack
Rating 4.23 3.24 3.98 2.56 3.2 4.6 3.8
rìu
Trả về danh sách các nhãn trục hàng và nhãn trục cột.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Row axis labels and column axis labels are:")
print df.axes
Nó là output như sau -
Row axis labels and column axis labels are:
[RangeIndex(start=0, stop=7, step=1), Index([u'Age', u'Name', u'Rating'],
dtype='object')]
dtypes
Trả về kiểu dữ liệu của mỗi cột.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("The data types of each column are:")
print df.dtypes
Nó là output như sau -
The data types of each column are:
Age int64
Name object
Rating float64
dtype: object
trống
Trả về giá trị Boolean cho biết Đối tượng có trống hay không; True chỉ ra rằng đối tượng trống.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Is the object empty?")
print df.empty
Nó là output như sau -
Is the object empty?
False
ndim
Trả về số kích thước của đối tượng. Theo định nghĩa, DataFrame là một đối tượng 2D.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The dimension of the object is:")
print df.ndim
Nó là output như sau -
Our object is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
The dimension of the object is:
2
hình dạng
Trả về một bộ giá trị đại diện cho kích thước của DataFrame. Tuple (a, b), trong đó a đại diện cho số hàng vàb đại diện cho số lượng cột.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The shape of the object is:")
print df.shape
Nó là output như sau -
Our object is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
The shape of the object is:
(7, 3)
kích thước
Trả về số phần tử trong DataFrame.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The total number of elements in our object is:")
print df.size
Nó là output như sau -
Our object is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
The total number of elements in our object is:
21
giá trị
Trả về dữ liệu thực tế trong DataFrame dưới dạng NDarray.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The actual data in our data frame is:")
print df.values
Nó là output như sau -
Our object is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
The actual data in our data frame is:
[[25 'Tom' 4.23]
[26 'James' 3.24]
[25 'Ricky' 3.98]
[23 'Vin' 2.56]
[30 'Steve' 3.2]
[29 'Smith' 4.6]
[23 'Jack' 3.8]]
Đầu & Đuôi
Để xem một mẫu nhỏ của đối tượng DataFrame, hãy sử dụng head() và phương thức tail (). head() trả về đầu tiên nhàng (quan sát các giá trị chỉ số). Số phần tử mặc định để hiển thị là năm phần tử, nhưng bạn có thể chuyển một số tùy chỉnh.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The first two rows of the data frame is:")
print df.head(2)
Nó là output như sau -
Our data frame is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
The first two rows of the data frame is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
tail() trả về cuối cùng nhàng (quan sát các giá trị chỉ số). Số phần tử mặc định để hiển thị là năm phần tử, nhưng bạn có thể chuyển một số tùy chỉnh.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
'Age':pd.Series([25,26,25,23,30,29,23]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The last two rows of the data frame is:")
print df.tail(2)
Nó là output như sau -
Our data frame is:
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
The last two rows of the data frame is:
Age Name Rating
5 29 Smith 4.6
6 23 Jack 3.8
Một số lượng lớn các phương pháp tính toán thống kê mô tả và các hoạt động liên quan khác trên DataFrame. Hầu hết đây là những tổng hợp nhưsum(), mean(), nhưng một số trong số họ, như sumsum(), sản xuất một đối tượng có cùng kích thước. Nói chung, các phương pháp này cóaxisđối số, giống như ndarray. {sum, std, ...}, nhưng trục có thể được chỉ định bằng tên hoặc số nguyên
DataFrame - “chỉ mục” (trục = 0, mặc định), “cột” (trục = 1)
Chúng ta hãy tạo một DataFrame và sử dụng đối tượng này trong suốt chương này cho tất cả các hoạt động.
Thí dụ
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df
Nó là output như sau -
Age Name Rating
0 25 Tom 4.23
1 26 James 3.24
2 25 Ricky 3.98
3 23 Vin 2.56
4 30 Steve 3.20
5 29 Smith 4.60
6 23 Jack 3.80
7 34 Lee 3.78
8 40 David 2.98
9 30 Gasper 4.80
10 51 Betina 4.10
11 46 Andres 3.65
Tổng()
Trả về tổng các giá trị cho trục được yêu cầu. Theo mặc định, trục là chỉ số (trục = 0).
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.sum()
Nó là output như sau -
Age 382
Name TomJamesRickyVinSteveSmithJackLeeDavidGasperBe...
Rating 44.92
dtype: object
Mỗi cột riêng lẻ được thêm vào riêng lẻ (Các chuỗi được nối thêm).
trục = 1
Cú pháp này sẽ cho kết quả như hình dưới đây.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.sum(1)
Nó là output như sau -
0 29.23
1 29.24
2 28.98
3 25.56
4 33.20
5 33.60
6 26.80
7 37.78
8 42.98
9 34.80
10 55.10
11 49.65
dtype: float64
nghĩa là()
Trả về giá trị trung bình
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.mean()
Nó là output như sau -
Age 31.833333
Rating 3.743333
dtype: float64
std ()
Trả về độ lệch chuẩn Bressel của các cột số.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.std()
Nó là output như sau -
Age 9.232682
Rating 0.661628
dtype: float64
Chức năng & Mô tả
Bây giờ chúng ta hãy hiểu các chức năng trong Thống kê mô tả trong Python Pandas. Bảng sau liệt kê các chức năng quan trọng:
Sr.No. | Chức năng | Sự miêu tả |
---|---|---|
1 | đếm() | Số quan sát không rỗng |
2 | Tổng() | Tổng các giá trị |
3 | nghĩa là() | Giá trị trung bình |
4 | Trung bình() | Giá trị trung bình |
5 | chế độ() | Phương thức giá trị |
6 | std () | Độ lệch chuẩn của các giá trị |
7 | min () | Giá trị tối thiểu |
số 8 | max () | Gia trị lơn nhât |
9 | abs () | Giá trị tuyệt đối |
10 | sản () | Sản phẩm của Giá trị |
11 | cumsum () | Tổng tích lũy |
12 | cumprod () | Sản phẩm tích lũy |
Note- Vì DataFrame là một cấu trúc dữ liệu Không đồng nhất. Các hoạt động chung không hoạt động với tất cả các chức năng.
Các chức năng như sum(), cumsum()làm việc với cả phần tử dữ liệu số và ký tự (hoặc) chuỗi mà không có bất kỳ lỗi nào. Tuy nhiênn thực hành, tổng hợp ký tự không bao giờ được sử dụng chung, các hàm này không ném ra bất kỳ ngoại lệ nào.
Các chức năng như abs(), cumprod() ném ngoại lệ khi DataFrame chứa dữ liệu ký tự hoặc chuỗi vì không thể thực hiện các thao tác như vậy.
Tổng hợp dữ liệu
Các describe() hàm tính toán một bản tóm tắt thống kê liên quan đến các cột DataFrame.
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.describe()
Nó là output như sau -
Age Rating
count 12.000000 12.000000
mean 31.833333 3.743333
std 9.232682 0.661628
min 23.000000 2.560000
25% 25.000000 3.230000
50% 29.500000 3.790000
75% 35.500000 4.132500
max 51.000000 4.800000
Chức năng này cung cấp cho mean, std và IQRcác giá trị. Và, hàm loại trừ các cột ký tự và tóm tắt đã cho về các cột số.'include'là đối số được sử dụng để chuyển thông tin cần thiết về những cột nào cần được xem xét để tóm tắt. Lấy danh sách các giá trị; theo mặc định, 'số'.
- object - Tóm tắt các cột Chuỗi
- number - Tóm tắt các cột số
- all - Tổng hợp tất cả các cột với nhau (Không nên chuyển nó dưới dạng giá trị danh sách)
Bây giờ, sử dụng câu lệnh sau trong chương trình và kiểm tra kết quả:
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df.describe(include=['object'])
Nó là output như sau -
Name
count 12
unique 12
top Ricky
freq 1
Bây giờ, hãy sử dụng câu lệnh sau và kiểm tra kết quả:
import pandas as pd
import numpy as np
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
#Create a DataFrame
df = pd.DataFrame(d)
print df. describe(include='all')
Nó là output như sau -
Age Name Rating
count 12.000000 12 12.000000
unique NaN 12 NaN
top NaN Ricky NaN
freq NaN 1 NaN
mean 31.833333 NaN 3.743333
std 9.232682 NaN 0.661628
min 23.000000 NaN 2.560000
25% 25.000000 NaN 3.230000
50% 29.500000 NaN 3.790000
75% 35.500000 NaN 4.132500
max 51.000000 NaN 4.800000
Để áp dụng các hàm của riêng bạn hoặc của thư viện khác cho các đối tượng Pandas, bạn nên biết ba phương pháp quan trọng. Các phương pháp đã được thảo luận dưới đây. Phương pháp thích hợp để sử dụng phụ thuộc vào việc chức năng của bạn có mong đợi hoạt động trên toàn bộ DataFrame, theo hàng hoặc theo cột hay không.
- Bảng khôn ngoan Ứng dụng hàm: pipe ()
- Ứng dụng Hàm Thông minh Hàng hoặc Cột: apply ()
- Phần tử khôn ngoan Ứng dụng hàm: applymap ()
Ứng dụng hàm khôn ngoan
Các hoạt động tùy chỉnh có thể được thực hiện bằng cách chuyển hàm và số lượng tham số thích hợp làm đối số ống. Do đó, hoạt động được thực hiện trên toàn bộ DataFrame.
Ví dụ: thêm giá trị 2 vào tất cả các phần tử trong DataFrame. Sau đó,
chức năng thêm
Hàm bộ cộng thêm hai giá trị số làm tham số và trả về tổng.
def adder(ele1,ele2):
return ele1+ele2
Bây giờ chúng ta sẽ sử dụng chức năng tùy chỉnh để tiến hành hoạt động trên DataFrame.
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
Hãy cùng xem toàn bộ chương trình -
import pandas as pd
import numpy as np
def adder(ele1,ele2):
return ele1+ele2
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
print df.apply(np.mean)
Nó là output như sau -
col1 col2 col3
0 2.176704 2.219691 1.509360
1 2.222378 2.422167 3.953921
2 2.241096 1.135424 2.696432
3 2.355763 0.376672 1.182570
4 2.308743 2.714767 2.130288
Ứng dụng hàm khôn ngoan hàng hoặc cột
Các chức năng tùy ý có thể được áp dụng dọc theo các trục của DataFrame hoặc Panel bằng cách sử dụng apply(), giống như các phương pháp thống kê mô tả, lấy đối số trục tùy chọn. Theo mặc định, hoạt động thực hiện cột khôn ngoan, coi mỗi cột như một mảng.
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
print df.apply(np.mean)
Nó là output như sau -
col1 -0.288022
col2 1.044839
col3 -0.187009
dtype: float64
Bằng cách đi qua axis tham số, hoạt động có thể được thực hiện hàng khôn ngoan.
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean,axis=1)
print df.apply(np.mean)
Nó là output như sau -
col1 0.034093
col2 -0.152672
col3 -0.229728
dtype: float64
Ví dụ 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(lambda x: x.max() - x.min())
print df.apply(np.mean)
Nó là output như sau -
col1 -0.167413
col2 -0.370495
col3 -0.707631
dtype: float64
Ứng dụng chức năng Element Wise
Không phải tất cả các hàm đều có thể được vector hóa (không phải mảng NumPy trả về mảng khác hoặc bất kỳ giá trị nào), các phương thức applymap() trên DataFrame và analogously map() trên Series chấp nhận bất kỳ hàm Python nào nhận một giá trị duy nhất và trả về một giá trị duy nhất.
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
# My custom function
df['col1'].map(lambda x:x*100)
print df.apply(np.mean)
Nó là output như sau -
col1 0.480742
col2 0.454185
col3 0.266563
dtype: float64
Ví dụ 2
import pandas as pd
import numpy as np
# My custom function
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*100)
print df.apply(np.mean)
Nó là output như sau -
col1 0.395263
col2 0.204418
col3 -0.795188
dtype: float64
Reindexingthay đổi nhãn hàng và nhãn cột của DataFrame. Lập chỉ mục lại có nghĩa là để dữ liệu phù hợp với một tập hợp nhãn nhất định dọc theo một trục cụ thể.
Nhiều hoạt động có thể được thực hiện thông qua lập chỉ mục như -
Sắp xếp lại dữ liệu hiện có để khớp với một tập hợp nhãn mới.
Chèn các điểm đánh dấu giá trị bị thiếu (NA) vào các vị trí nhãn nơi không có dữ liệu cho nhãn.
Thí dụ
import pandas as pd
import numpy as np
N=20
df = pd.DataFrame({
'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
'x': np.linspace(0,stop=N-1,num=N),
'y': np.random.rand(N),
'C': np.random.choice(['Low','Medium','High'],N).tolist(),
'D': np.random.normal(100, 10, size=(N)).tolist()
})
#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
print df_reindexed
Nó là output như sau -
A C B
0 2016-01-01 Low NaN
2 2016-01-03 High NaN
5 2016-01-06 Low NaN
Reindex để căn chỉnh với các đối tượng khác
Bạn có thể muốn lấy một đối tượng và lập chỉ mục lại các trục của nó để được gắn nhãn giống như một đối tượng khác. Hãy xem xét ví dụ sau để hiểu tương tự.
Thí dụ
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
df1 = df1.reindex_like(df2)
print df1
Nó là output như sau -
col1 col2 col3
0 -2.467652 -1.211687 -0.391761
1 -0.287396 0.522350 0.562512
2 -0.255409 -0.483250 1.866258
3 -1.150467 -0.646493 -0.222462
4 0.152768 -2.056643 1.877233
5 -1.155997 1.528719 -1.343719
6 -1.015606 -1.245936 -0.295275
Note - Đây, df1 DataFrame được thay đổi và lập chỉ mục lại như df2. Các tên cột phải được trùng khớp nếu không NAN sẽ được thêm vào cho toàn bộ nhãn cột.
Làm đầy trong khi ReIndexing
reindex() nhận một phương thức tham số tùy chọn là một phương thức điền với các giá trị như sau:
pad/ffill - Điền giá trị về phía trước
bfill/backfill - Điền lùi các giá trị
nearest - Điền từ các giá trị chỉ mục gần nhất
Thí dụ
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
print df2.reindex_like(df1,method='ffill')
Nó là output như sau -
col1 col2 col3
0 1.311620 -0.707176 0.599863
1 -0.423455 -0.700265 1.133371
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Data Frame with Forward Fill:
col1 col2 col3
0 1.311620 -0.707176 0.599863
1 -0.423455 -0.700265 1.133371
2 -0.423455 -0.700265 1.133371
3 -0.423455 -0.700265 1.133371
4 -0.423455 -0.700265 1.133371
5 -0.423455 -0.700265 1.133371
Note - Bốn hàng cuối cùng được đệm.
Giới hạn về việc điền trong khi lập chỉ mục lại
Đối số giới hạn cung cấp kiểm soát bổ sung đối với việc điền trong khi lập chỉ mục lại. Giới hạn chỉ định số lượng trận đấu liên tiếp tối đa. Chúng ta hãy xem xét ví dụ sau để hiểu giống nhau -
Thí dụ
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 1:")
print df2.reindex_like(df1,method='ffill',limit=1)
Nó là output như sau -
col1 col2 col3
0 0.247784 2.128727 0.702576
1 -0.055713 -0.021732 -0.174577
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Data Frame with Forward Fill limiting to 1:
col1 col2 col3
0 0.247784 2.128727 0.702576
1 -0.055713 -0.021732 -0.174577
2 -0.055713 -0.021732 -0.174577
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Note- Quan sát, chỉ hàng thứ 7 được tô bằng hàng thứ 6 liền trước. Sau đó, các hàng được giữ nguyên như cũ.
Đổi tên
Phương thức rename () cho phép bạn gắn nhãn lại một trục dựa trên một số ánh xạ (một dict hoặc Chuỗi) hoặc một hàm tùy ý.
Chúng ta hãy xem xét ví dụ sau để hiểu điều này -
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1
print ("After renaming the rows and columns:")
print df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})
Nó là output như sau -
col1 col2 col3
0 0.486791 0.105759 1.540122
1 -0.990237 1.007885 -0.217896
2 -0.483855 -1.645027 -1.194113
3 -0.122316 0.566277 -0.366028
4 -0.231524 -0.721172 -0.112007
5 0.438810 0.000225 0.435479
After renaming the rows and columns:
c1 c2 col3
apple 0.486791 0.105759 1.540122
banana -0.990237 1.007885 -0.217896
durian -0.483855 -1.645027 -1.194113
3 -0.122316 0.566277 -0.366028
4 -0.231524 -0.721172 -0.112007
5 0.438810 0.000225 0.435479
Phương thức rename () cung cấp một inplacetham số được đặt tên, theo mặc định là Sai và sao chép dữ liệu cơ bản. Vượt quainplace=True để đổi tên dữ liệu tại chỗ.
Hành vi của lặp lại cơ bản trên các đối tượng Pandas phụ thuộc vào loại. Khi lặp qua một Chuỗi, nó được coi là giống như mảng và phép lặp cơ bản tạo ra các giá trị. Các cấu trúc dữ liệu khác, như DataFrame và Panel, tuân theodict-like quy ước lặp lại keys của các đối tượng.
Tóm lại, phép lặp cơ bản (đối với i trong đối tượng) sản xuất -
Series - giá trị
DataFrame - nhãn cột
Panel - nhãn mặt hàng
Lặp lại một DataFrame
Lặp lại một DataFrame cung cấp các tên cột. Chúng ta hãy xem xét ví dụ sau để hiểu tương tự.
import pandas as pd
import numpy as np
N=20
df = pd.DataFrame({
'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
'x': np.linspace(0,stop=N-1,num=N),
'y': np.random.rand(N),
'C': np.random.choice(['Low','Medium','High'],N).tolist(),
'D': np.random.normal(100, 10, size=(N)).tolist()
})
for col in df:
print col
Nó là output như sau -
A
C
D
x
y
Để lặp qua các hàng của DataFrame, chúng ta có thể sử dụng các hàm sau:
iteritems() - để lặp lại các cặp (khóa, giá trị)
iterrows() - lặp qua các hàng dưới dạng cặp (chỉ mục, chuỗi)
itertuples() - lặp qua các hàng dưới dạng các nhóm có tên
iteritems ()
Lặp lại từng cột dưới dạng khóa, cặp giá trị với nhãn là khóa và giá trị cột dưới dạng đối tượng Dòng.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3'])
for key,value in df.iteritems():
print key,value
Nó là output như sau -
col1 0 0.802390
1 0.324060
2 0.256811
3 0.839186
Name: col1, dtype: float64
col2 0 1.624313
1 -1.033582
2 1.796663
3 1.856277
Name: col2, dtype: float64
col3 0 -0.022142
1 -0.230820
2 1.160691
3 -0.830279
Name: col3, dtype: float64
Quan sát, mỗi cột được lặp lại riêng biệt dưới dạng một cặp khóa-giá trị trong Chuỗi.
iterrows ()
iterrows () trả về trình lặp mang lại từng giá trị chỉ mục cùng với một chuỗi chứa dữ liệu trong mỗi hàng.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for row_index,row in df.iterrows():
print row_index,row
Nó là output như sau -
0 col1 1.529759
col2 0.762811
col3 -0.634691
Name: 0, dtype: float64
1 col1 -0.944087
col2 1.420919
col3 -0.507895
Name: 1, dtype: float64
2 col1 -0.077287
col2 -0.858556
col3 -0.663385
Name: 2, dtype: float64
3 col1 -1.638578
col2 0.059866
col3 0.493482
Name: 3, dtype: float64
Note - Vì iterrows()lặp qua các hàng, nó không bảo toàn kiểu dữ liệu trên hàng. 0,1,2 là các chỉ số hàng và col1, col2, col3 là các chỉ số cột.
itertuples ()
Phương thức itertuples () sẽ trả về một trình vòng lặp mang lại một bộ giá trị được đặt tên cho mỗi hàng trong DataFrame. Phần tử đầu tiên của bộ tuple sẽ là giá trị chỉ số tương ứng của hàng, trong khi các giá trị còn lại là giá trị hàng.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for row in df.itertuples():
print row
Nó là output như sau -
Pandas(Index=0, col1=1.5297586201375899, col2=0.76281127433814944, col3=-
0.6346908238310438)
Pandas(Index=1, col1=-0.94408735763808649, col2=1.4209186418359423, col3=-
0.50789517967096232)
Pandas(Index=2, col1=-0.07728664756791935, col2=-0.85855574139699076, col3=-
0.6633852507207626)
Pandas(Index=3, col1=0.65734942534106289, col2=-0.95057710432604969,
col3=0.80344487462316527)
Note- Không cố gắng sửa đổi bất kỳ đối tượng nào trong khi lặp. Lặp lại có nghĩa là để đọc và trình lặp trả về một bản sao của đối tượng ban đầu (một khung nhìn), do đó các thay đổi sẽ không phản ánh trên đối tượng ban đầu.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for index, row in df.iterrows():
row['a'] = 10
print df
Nó là output như sau -
col1 col2 col3
0 -1.739815 0.735595 -0.295589
1 0.635485 0.106803 1.527922
2 -0.939064 0.547095 0.038585
3 -1.016509 -0.116580 -0.523158
Quan sát, không có thay đổi nào được phản ánh.
Có hai loại phân loại có sẵn trong Gấu trúc. Họ là -
- Theo nhãn
- Theo giá trị thực tế
Chúng ta hãy xem xét một ví dụ với một đầu ra.
import pandas as pd
import numpy as np
unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
mns=['col2','col1'])
print unsorted_df
Nó là output như sau -
col2 col1
1 -2.063177 0.537527
4 0.142932 -0.684884
6 0.012667 -0.389340
2 -0.548797 1.848743
3 -1.044160 0.837381
5 0.385605 1.300185
9 1.031425 -1.002967
8 -0.407374 -0.435142
0 2.237453 -1.067139
7 -1.445831 -1.701035
Trong unsorted_df, các labels và valueskhông được sắp xếp. Hãy để chúng tôi xem chúng có thể được sắp xếp như thế nào.
Theo nhãn
Sử dụng sort_index(), bằng cách chuyển các đối số trục và thứ tự sắp xếp, DataFrame có thể được sắp xếp. Theo mặc định, việc sắp xếp được thực hiện trên các nhãn hàng theo thứ tự tăng dần.
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
mns = ['col2','col1'])
sorted_df=unsorted_df.sort_index()
print sorted_df
Nó là output như sau -
col2 col1
0 0.208464 0.627037
1 0.641004 0.331352
2 -0.038067 -0.464730
3 -0.638456 -0.021466
4 0.014646 -0.737438
5 -0.290761 -1.669827
6 -0.797303 -0.018737
7 0.525753 1.628921
8 -0.567031 0.775951
9 0.060724 -0.322425
Thứ tự sắp xếp
Bằng cách chuyển giá trị Boolean cho tham số tăng dần, thứ tự sắp xếp có thể được kiểm soát. Chúng ta hãy xem xét ví dụ sau để hiểu tương tự.
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
mns = ['col2','col1'])
sorted_df = unsorted_df.sort_index(ascending=False)
print sorted_df
Nó là output như sau -
col2 col1
9 0.825697 0.374463
8 -1.699509 0.510373
7 -0.581378 0.622958
6 -0.202951 0.954300
5 -1.289321 -1.551250
4 1.302561 0.851385
3 -0.157915 -0.388659
2 -1.222295 0.166609
1 0.584890 -0.291048
0 0.668444 -0.061294
Sắp xếp các cột
Bằng cách chuyển đối số trục với giá trị 0 hoặc 1, việc sắp xếp có thể được thực hiện trên các nhãn cột. Theo mặc định, axis = 0, sắp xếp theo hàng. Chúng ta hãy xem xét ví dụ sau để hiểu tương tự.
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
mns = ['col2','col1'])
sorted_df=unsorted_df.sort_index(axis=1)
print sorted_df
Nó là output như sau -
col1 col2
1 -0.291048 0.584890
4 0.851385 1.302561
6 0.954300 -0.202951
2 0.166609 -1.222295
3 -0.388659 -0.157915
5 -1.551250 -1.289321
9 0.374463 0.825697
8 0.510373 -1.699509
0 -0.061294 0.668444
7 0.622958 -0.581378
Theo giá trị
Giống như sắp xếp chỉ mục, sort_values()là phương pháp sắp xếp theo giá trị. Nó chấp nhận một đối số 'by' sẽ sử dụng tên cột của DataFrame mà các giá trị sẽ được sắp xếp.
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1')
print sorted_df
Nó là output như sau -
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1
Hãy quan sát, các giá trị col1 được sắp xếp và giá trị col2 và chỉ số hàng tương ứng sẽ thay đổi cùng với col1. Vì vậy, chúng trông không được sắp xếp.
'by' đối số nhận một danh sách các giá trị cột.
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by=['col1','col2'])
print sorted_df
Nó là output như sau -
col1 col2
2 1 2
1 1 3
3 1 4
0 2 1
Thuật toán sắp xếp
sort_values()cung cấp một điều khoản để lựa chọn thuật toán từ mergesort, heapsort và quicksort. Mergesort là thuật toán ổn định duy nhất.
import pandas as pd
import numpy as np
unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1' ,kind='mergesort')
print sorted_df
Nó là output như sau -
col1 col2
1 1 3
2 1 2
3 1 4
0 2 1
Trong chương này, chúng tôi sẽ thảo luận về các hoạt động chuỗi với Chuỗi / Chỉ mục cơ bản của chúng tôi. Trong các chương tiếp theo, chúng ta sẽ học cách áp dụng các hàm chuỗi này trên DataFrame.
Pandas cung cấp một tập hợp các hàm chuỗi giúp dễ dàng thao tác trên dữ liệu chuỗi. Quan trọng nhất, các hàm này bỏ qua (hoặc loại trừ) các giá trị thiếu / NaN.
Hầu như, tất cả các phương pháp này đều hoạt động với các hàm chuỗi Python (tham khảo: https://docs.python.org/3/library/stdtypes.html#string-methods). Vì vậy, hãy chuyển đổi Đối tượng chuỗi thành Đối tượng chuỗi và sau đó thực hiện thao tác.
Bây giờ chúng ta hãy xem mỗi hoạt động thực hiện như thế nào.
Sr.No | Mô tả chức năng |
---|---|
1 | lower() Chuyển đổi các chuỗi trong Chuỗi / Chỉ mục thành chữ thường. |
2 | upper() Chuyển đổi các chuỗi trong Chuỗi / Chỉ mục thành chữ hoa. |
3 | len() Tính độ dài chuỗi (). |
4 | strip() Giúp loại bỏ khoảng trắng (bao gồm cả dòng mới) từ mỗi chuỗi trong Chuỗi / chỉ mục từ cả hai bên. |
5 | split(' ') Tách từng chuỗi với mẫu đã cho. |
6 | cat(sep=' ') Nối các phần tử chuỗi / chỉ mục với dấu phân cách đã cho. |
7 | get_dummies() Trả về DataFrame với các giá trị được mã hóa một lần. |
số 8 | contains(pattern) Trả về giá trị Boolean Đúng cho mỗi phần tử nếu chuỗi con chứa trong phần tử, còn lại Sai. |
9 | replace(a,b) Thay thế giá trị a với giá trị b. |
10 | repeat(value) Lặp lại từng phần tử với số lần xác định. |
11 | count(pattern) Trả về số lần xuất hiện của mẫu trong mỗi phần tử. |
12 | startswith(pattern) Trả về true nếu phần tử trong Chuỗi / Chỉ mục bắt đầu bằng mẫu. |
13 | endswith(pattern) Trả về true nếu phần tử trong Chuỗi / Chỉ mục kết thúc bằng mẫu. |
14 | find(pattern) Trả về vị trí đầu tiên của lần xuất hiện đầu tiên của mẫu. |
15 | findall(pattern) Trả về danh sách tất cả các lần xuất hiện của mẫu. |
16 | swapcase Hoán đổi chữ hoa / chữ thường. |
17 | islower() Kiểm tra xem tất cả các ký tự trong mỗi chuỗi trong Chuỗi / Chỉ mục có viết thường hay không. Trả về Boolean |
18 | isupper() Kiểm tra xem tất cả các ký tự trong mỗi chuỗi trong Chuỗi / Chỉ mục có viết hoa hay không. Trả về Boolean. |
19 | isnumeric() Kiểm tra xem tất cả các ký tự trong mỗi chuỗi trong Chuỗi / Chỉ mục có phải là số hay không. Trả về Boolean. |
Bây giờ chúng ta hãy tạo một Series và xem tất cả các chức năng trên hoạt động như thế nào.
import pandas as pd
import numpy as np
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])
print s
Nó là output như sau -
0 Tom
1 William Rick
2 John
3 Alber@t
4 NaN
5 1234
6 Steve Smith
dtype: object
thấp hơn()
import pandas as pd
import numpy as np
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])
print s.str.lower()
Nó là output như sau -
0 tom
1 william rick
2 john
3 alber@t
4 NaN
5 1234
6 steve smith
dtype: object
phía trên()
import pandas as pd
import numpy as np
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])
print s.str.upper()
Nó là output như sau -
0 TOM
1 WILLIAM RICK
2 JOHN
3 ALBER@T
4 NaN
5 1234
6 STEVE SMITH
dtype: object
len ()
import pandas as pd
import numpy as np
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])
print s.str.len()
Nó là output như sau -
0 3.0
1 12.0
2 4.0
3 7.0
4 NaN
5 4.0
6 10.0
dtype: float64
dải ()
import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("After Stripping:")
print s.str.strip()
Nó là output như sau -
0 Tom
1 William Rick
2 John
3 Alber@t
dtype: object
After Stripping:
0 Tom
1 William Rick
2 John
3 Alber@t
dtype: object
tách (mẫu)
import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("Split Pattern:")
print s.str.split(' ')
Nó là output như sau -
0 Tom
1 William Rick
2 John
3 Alber@t
dtype: object
Split Pattern:
0 [Tom, , , , , , , , , , ]
1 [, , , , , William, Rick]
2 [John]
3 [Alber@t]
dtype: object
mèo (sep = hoa văn)
import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s.str.cat(sep='_')
Nó là output như sau -
Tom _ William Rick_John_Alber@t
get_dummies ()
import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s.str.get_dummies()
Nó là output như sau -
William Rick Alber@t John Tom
0 0 0 0 1
1 1 0 0 0
2 0 0 1 0
3 0 1 0 0
chứa đựng ()
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s.str.contains(' ')
Nó là output như sau -
0 True
1 True
2 False
3 False
dtype: bool
thay thế (a, b)
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("After replacing @ with $:") print s.str.replace('@','$')
Nó là output như sau -
0 Tom
1 William Rick
2 John
3 Alber@t
dtype: object
After replacing @ with $: 0 Tom 1 William Rick 2 John 3 Alber$t
dtype: object
lặp lại (giá trị)
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s.str.repeat(2)
Nó là output như sau -
0 Tom Tom
1 William Rick William Rick
2 JohnJohn
3 Alber@tAlber@t
dtype: object
đếm (mẫu)
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print ("The number of 'm's in each string:")
print s.str.count('m')
Nó là output như sau -
The number of 'm's in each string:
0 1
1 1
2 0
3 0
startwith (mẫu)
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print ("Strings that start with 'T':")
print s.str. startswith ('T')
Nó là output như sau -
0 True
1 False
2 False
3 False
dtype: bool
endwith (mẫu)
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print ("Strings that end with 't':")
print s.str.endswith('t')
Nó là output như sau -
Strings that end with 't':
0 False
1 False
2 False
3 True
dtype: bool
tìm (mẫu)
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s.str.find('e')
Nó là output như sau -
0 -1
1 -1
2 -1
3 3
dtype: int64
"-1" cho biết rằng phần tử không có mẫu như vậy.
findall (mẫu)
import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s.str.findall('e')
Nó là output như sau -
0 []
1 []
2 []
3 [e]
dtype: object
Danh sách rỗng ([]) chỉ ra rằng không có mẫu nào như vậy có sẵn trong phần tử.
swapcase ()
import pandas as pd
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.swapcase()
Nó là output như sau -
0 tOM
1 wILLIAM rICK
2 jOHN
3 aLBER@T
dtype: object
thấp hơn()
import pandas as pd
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.islower()
Nó là output như sau -
0 False
1 False
2 False
3 False
dtype: bool
isupper ()
import pandas as pd
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.isupper()
Nó là output như sau -
0 False
1 False
2 False
3 False
dtype: bool
isnumeric ()
import pandas as pd
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.isnumeric()
Nó là output như sau -
0 False
1 False
2 False
3 False
dtype: bool
Pandas cung cấp API để tùy chỉnh một số khía cạnh của hành vi của nó, hiển thị đang được sử dụng hầu hết.
API bao gồm năm chức năng có liên quan. Họ là -
- get_option()
- set_option()
- reset_option()
- describe_option()
- option_context()
Bây giờ chúng ta hãy hiểu cách các chức năng hoạt động.
get_option (tham số)
get_option nhận một tham số duy nhất và trả về giá trị như đã cho trong đầu ra bên dưới:
display.max_rows
Hiển thị số giá trị mặc định. Trình thông dịch đọc giá trị này và hiển thị các hàng có giá trị này làm giới hạn trên để hiển thị.
import pandas as pd
print pd.get_option("display.max_rows")
Nó là output như sau -
60
display.max_columns
Hiển thị số giá trị mặc định. Trình thông dịch đọc giá trị này và hiển thị các hàng có giá trị này làm giới hạn trên để hiển thị.
import pandas as pd
print pd.get_option("display.max_columns")
Nó là output như sau -
20
Ở đây, 60 và 20 là giá trị tham số cấu hình mặc định.
set_option (tham số, giá trị)
set_option nhận hai đối số và đặt giá trị cho tham số như hình dưới đây:
display.max_rows
Sử dụng set_option(), chúng ta có thể thay đổi số hàng mặc định được hiển thị.
import pandas as pd
pd.set_option("display.max_rows",80)
print pd.get_option("display.max_rows")
Nó là output như sau -
80
display.max_columns
Sử dụng set_option(), chúng ta có thể thay đổi số hàng mặc định được hiển thị.
import pandas as pd
pd.set_option("display.max_columns",30)
print pd.get_option("display.max_columns")
Nó là output như sau -
30
reset_option (tham số)
reset_option nhận một đối số và đặt giá trị trở lại giá trị mặc định.
display.max_rows
Sử dụng reset_option (), chúng ta có thể thay đổi giá trị trở lại số hàng mặc định được hiển thị.
import pandas as pd
pd.reset_option("display.max_rows")
print pd.get_option("display.max_rows")
Nó là output như sau -
60
description_option (tham số)
describe_option in mô tả của đối số.
display.max_rows
Sử dụng reset_option (), chúng ta có thể thay đổi giá trị trở lại số hàng mặc định được hiển thị.
import pandas as pd
pd.describe_option("display.max_rows")
Nó là output như sau -
display.max_rows : int
If max_rows is exceeded, switch to truncate view. Depending on
'large_repr', objects are either centrally truncated or printed as
a summary view. 'None' value means unlimited.
In case python/IPython is running in a terminal and `large_repr`
equals 'truncate' this can be set to 0 and pandas will auto-detect
the height of the terminal and print a truncated object which fits
the screen height. The IPython notebook, IPython qtconsole, or
IDLE do not run in a terminal and hence it is not possible to do
correct auto-detection.
[default: 60] [currently: 60]
option_context ()
Trình quản lý ngữ cảnh option_context được sử dụng để đặt tùy chọn trong with statementmột cách tạm thời. Giá trị tùy chọn được khôi phục tự động khi bạn thoát khỏiwith block -
display.max_rows
Sử dụng option_context (), chúng ta có thể đặt giá trị tạm thời.
import pandas as pd
with pd.option_context("display.max_rows",10):
print(pd.get_option("display.max_rows"))
print(pd.get_option("display.max_rows"))
Nó là output như sau -
10
10
Hãy xem, sự khác biệt giữa câu lệnh in đầu tiên và thứ hai. Câu lệnh đầu tiên in ra giá trị được đặt bởioption_context() đó là tạm thời trong with contextchinh no. Sauwith context, câu lệnh in thứ hai in ra giá trị đã cấu hình.
Các thông số thường dùng
Sr.No | Mô tả về Thông Số |
---|---|
1 | display.max_rows Hiển thị số hàng tối đa để hiển thị |
2 | 2 display.max_columns Hiển thị số cột tối đa để hiển thị |
3 | display.expand_frame_repr Hiển thị DataFrames để kéo dài trang |
4 | display.max_colwidth Hiển thị chiều rộng cột tối đa |
5 | display.precision Hiển thị độ chính xác cho các số thập phân |
Trong chương này, chúng ta sẽ thảo luận về cách cắt và xúc xắc ngày và nói chung lấy tập con của đối tượng gấu trúc.
Toán tử lập chỉ mục Python và NumPy "[]" và toán tử thuộc tính "." cung cấp quyền truy cập nhanh chóng và dễ dàng vào cấu trúc dữ liệu của Pandas trong nhiều trường hợp sử dụng. Tuy nhiên, vì loại dữ liệu được truy cập không được biết trước nên việc sử dụng trực tiếp các toán tử tiêu chuẩn có một số giới hạn tối ưu hóa. Đối với mã sản xuất, chúng tôi khuyên bạn nên tận dụng các phương pháp truy cập dữ liệu gấu trúc được tối ưu hóa được giải thích trong chương này.
Pandas hiện hỗ trợ ba kiểu lập chỉ mục Đa trục; ba loại được đề cập trong bảng sau:
Sr.No | Lập chỉ mục & Mô tả |
---|---|
1 | .loc() Dựa trên nhãn |
2 | .iloc() Dựa trên số nguyên |
3 | .ix() Dựa trên cả Nhãn và Số nguyên |
.loc ()
Gấu trúc cung cấp nhiều phương pháp khác nhau để có label based indexing. Khi cắt, giới hạn bắt đầu cũng được bao gồm. Số nguyên là nhãn hợp lệ, nhưng chúng tham chiếu đến nhãn chứ không phải vị trí.
.loc() có nhiều phương thức truy cập như -
- Một nhãn vô hướng duy nhất
- Danh sách các nhãn
- Một đối tượng lát cắt
- Một mảng Boolean
locnhận hai toán tử đơn / danh sách / dải ô được phân tách bằng ','. Cái đầu tiên cho biết hàng và cái thứ hai chỉ ra cột.
ví dụ 1
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
#select all rows for a specific column
print df.loc[:,'A']
Nó là output như sau -
a 0.391548
b -0.070649
c -0.317212
d -2.162406
e 2.202797
f 0.613709
g 1.050559
h 1.122680
Name: A, dtype: float64
Ví dụ 2
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select all rows for multiple columns, say list[]
print df.loc[:,['A','C']]
Nó là output như sau -
A C
a 0.391548 0.745623
b -0.070649 1.620406
c -0.317212 1.448365
d -2.162406 -0.873557
e 2.202797 0.528067
f 0.613709 0.286414
g 1.050559 0.216526
h 1.122680 -1.621420
Ví dụ 3
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select few rows for multiple columns, say list[]
print df.loc[['a','b','f','h'],['A','C']]
Nó là output như sau -
A C
a 0.391548 0.745623
b -0.070649 1.620406
f 0.613709 0.286414
h 1.122680 -1.621420
Ví dụ 4
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select range of rows for all columns
print df.loc['a':'h']
Nó là output như sau -
A B C D
a 0.391548 -0.224297 0.745623 0.054301
b -0.070649 -0.880130 1.620406 1.419743
c -0.317212 -1.929698 1.448365 0.616899
d -2.162406 0.614256 -0.873557 1.093958
e 2.202797 -2.315915 0.528067 0.612482
f 0.613709 -0.157674 0.286414 -0.500517
g 1.050559 -2.272099 0.216526 0.928449
h 1.122680 0.324368 -1.621420 -0.741470
Ví dụ 5
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# for getting values with a boolean array
print df.loc['a']>0
Nó là output như sau -
A False
B True
C False
D False
Name: a, dtype: bool
.iloc ()
Pandas cung cấp nhiều phương thức khác nhau để lấy chỉ mục hoàn toàn dựa trên số nguyên. Giống như python và numpy, đây là0-based lập chỉ mục.
Các phương pháp truy cập khác nhau như sau:
- Một số nguyên
- Danh sách các số nguyên
- Một loạt các giá trị
ví dụ 1
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# select all rows for a specific column
print df.iloc[:4]
Nó là output như sau -
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Integer slicing
print df.iloc[:4]
print df.iloc[1:5, 2:4]
Nó là output như sau -
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
C D
1 -0.813012 0.631615
2 0.025070 0.230806
3 0.826977 -0.026251
4 1.423332 1.130568
Ví dụ 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Slicing through list of values
print df.iloc[[1, 3, 5], [1, 3]]
print df.iloc[1:3, :]
print df.iloc[:,1:3]
Nó là output như sau -
B D
1 0.890791 0.631615
3 -1.284314 -0.026251
5 -0.512888 -0.518930
A B C D
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
B C
0 0.256239 -1.270702
1 0.890791 -0.813012
2 -0.531378 0.025070
3 -1.284314 0.826977
4 -0.460729 1.423332
5 -0.512888 0.581409
6 -1.204853 0.098060
7 -0.947857 0.641358
.ix ()
Bên cạnh dựa trên nhãn thuần túy và dựa trên số nguyên, Pandas cung cấp một phương pháp kết hợp để lựa chọn và tập hợp con đối tượng bằng cách sử dụng toán tử .ix ().
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Integer slicing
print df.ix[:4]
Nó là output như sau -
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Index slicing
print df.ix[:,'A']
Nó là output như sau -
0 0.699435
1 -0.685354
2 -0.783192
3 0.539042
4 -1.044209
5 -1.415411
6 1.062095
7 0.994204
Name: A, dtype: float64
Sử dụng ký hiệu
Nhận các giá trị từ đối tượng Pandas với lập chỉ mục Nhiều trục sử dụng ký hiệu sau:
Vật | Người lập chỉ mục | Loại trả lại |
---|---|---|
Loạt | s.loc [indexer] | Giá trị vô hướng |
Khung dữ liệu | df.loc [row_index, col_index] | Đối tượng loạt |
Bảng điều khiển | p.loc [item_index, major_index, small_index] | p.loc [item_index, major_index, small_index] |
Note − .iloc() & .ix() áp dụng cùng các tùy chọn lập chỉ mục và Giá trị trả lại.
Bây giờ chúng ta hãy xem từng thao tác có thể được thực hiện như thế nào trên đối tượng DataFrame. Chúng tôi sẽ sử dụng toán tử lập chỉ mục cơ bản '[]' -
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df['A']
Nó là output như sau -
0 -0.478893
1 0.391931
2 0.336825
3 -1.055102
4 -0.165218
5 -0.328641
6 0.567721
7 -0.759399
Name: A, dtype: float64
Note - Chúng ta có thể chuyển một danh sách các giá trị cho [] để chọn các cột đó.
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[['A','B']]
Nó là output như sau -
A B
0 -0.478893 -0.606311
1 0.391931 -0.949025
2 0.336825 0.093717
3 -1.055102 -0.012944
4 -0.165218 1.550310
5 -0.328641 -0.226363
6 0.567721 -0.312585
7 -0.759399 -0.372696
Ví dụ 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[2:2]
Nó là output như sau -
Columns: [A, B, C, D]
Index: []
Quyền truy cập thuộc tính
Có thể chọn các cột bằng toán tử thuộc tính '.'.
Thí dụ
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df.A
Nó là output như sau -
0 -0.478893
1 0.391931
2 0.336825
3 -1.055102
4 -0.165218
5 -0.328641
6 0.567721
7 -0.759399
Name: A, dtype: float64
Phương pháp thống kê giúp hiểu và phân tích hành vi của dữ liệu. Bây giờ chúng ta sẽ tìm hiểu một vài hàm thống kê, chúng ta có thể áp dụng trên các đối tượng Pandas.
Phần trăm thay đổi
Series, DatFrames và Panel, tất cả đều có chức năng pct_change(). Hàm này so sánh mọi phần tử với phần tử trước của nó và tính toán tỷ lệ phần trăm thay đổi.
import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4,5,4])
print s.pct_change()
df = pd.DataFrame(np.random.randn(5, 2))
print df.pct_change()
Nó là output như sau -
0 NaN
1 1.000000
2 0.500000
3 0.333333
4 0.250000
5 -0.200000
dtype: float64
0 1
0 NaN NaN
1 -15.151902 0.174730
2 -0.746374 -1.449088
3 -3.582229 -3.165836
4 15.601150 -1.860434
Theo mặc định, pct_change()hoạt động trên các cột; nếu bạn muốn áp dụng cùng một hàng một cách khôn ngoan, thì hãy sử dụngaxis=1() tranh luận.
Hiệp phương sai
Hiệp phương sai được áp dụng trên dữ liệu chuỗi. Đối tượng Series có một phương thức cov để tính hiệp phương sai giữa các đối tượng chuỗi. NA sẽ tự động bị loại trừ.
Dòng Cov
import pandas as pd
import numpy as np
s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(10))
print s1.cov(s2)
Nó là output như sau -
-0.12978405324
Phương pháp hiệp phương sai khi được áp dụng trên DataFrame, tính toán cov giữa tất cả các cột.
import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
print frame['a'].cov(frame['b'])
print frame.cov()
Nó là output như sau -
-0.58312921152741437
a b c d e
a 1.780628 -0.583129 -0.185575 0.003679 -0.136558
b -0.583129 1.297011 0.136530 -0.523719 0.251064
c -0.185575 0.136530 0.915227 -0.053881 -0.058926
d 0.003679 -0.523719 -0.053881 1.521426 -0.487694
e -0.136558 0.251064 -0.058926 -0.487694 0.960761
Note - Quan sát cov giữa a và b trong câu lệnh đầu tiên và cùng là giá trị được trả về bởi cov trên DataFrame.
Tương quan
Tương quan cho thấy mối quan hệ tuyến tính giữa hai mảng giá trị (chuỗi) bất kỳ. Có nhiều phương pháp để tính toán mối tương quan như pearson (mặc định), Speman và kendall.
import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
print frame['a'].corr(frame['b'])
print frame.corr()
Nó là output như sau -
-0.383712785514
a b c d e
a 1.000000 -0.383713 -0.145368 0.002235 -0.104405
b -0.383713 1.000000 0.125311 -0.372821 0.224908
c -0.145368 0.125311 1.000000 -0.045661 -0.062840
d 0.002235 -0.372821 -0.045661 1.000000 -0.403380
e -0.104405 0.224908 -0.062840 -0.403380 1.000000
Nếu có bất kỳ cột nào không phải là số trong DataFrame, cột đó sẽ tự động bị loại trừ.
Xếp hạng dữ liệu
Xếp hạng Dữ liệu tạo ra xếp hạng cho từng phần tử trong mảng các phần tử. Trong trường hợp quan hệ, chỉ định thứ hạng trung bình.
import pandas as pd
import numpy as np
s = pd.Series(np.random.np.random.randn(5), index=list('abcde'))
s['d'] = s['b'] # so there's a tie
print s.rank()
Nó là output như sau -
a 1.0
b 3.5
c 2.0
d 3.5
e 5.0
dtype: float64
Xếp hạng tùy chọn nhận một tham số tăng dần theo mặc định là đúng; khi sai, dữ liệu được xếp hạng ngược, với các giá trị lớn hơn được chỉ định một thứ hạng nhỏ hơn.
Xếp hạng hỗ trợ các phương pháp ràng buộc khác nhau, được chỉ định bằng tham số phương thức -
average - xếp hạng trung bình của nhóm bị ràng buộc
min - thứ hạng thấp nhất trong nhóm
max - thứ hạng cao nhất trong nhóm
first - xếp hạng được chỉ định theo thứ tự xuất hiện trong mảng
Để làm việc trên dữ liệu số, Pandas cung cấp một số biến thể như trọng số cuộn, mở rộng và di chuyển theo cấp số nhân cho thống kê cửa sổ. Trong số này cósum, mean, median, variance, covariance, correlation, Vân vân.
Bây giờ chúng ta sẽ tìm hiểu cách áp dụng từng thứ này trên các đối tượng DataFrame.
.rolling () Hàm
Chức năng này có thể được áp dụng trên một loạt dữ liệu. Chỉ định lawindow=n lập luận và áp dụng hàm thống kê thích hợp trên nó.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df.rolling(window=3).mean()
Nó là output như sau -
A B C D
2000-01-01 NaN NaN NaN NaN
2000-01-02 NaN NaN NaN NaN
2000-01-03 0.434553 -0.667940 -1.051718 -0.826452
2000-01-04 0.628267 -0.047040 -0.287467 -0.161110
2000-01-05 0.398233 0.003517 0.099126 -0.405565
2000-01-06 0.641798 0.656184 -0.322728 0.428015
2000-01-07 0.188403 0.010913 -0.708645 0.160932
2000-01-08 0.188043 -0.253039 -0.818125 -0.108485
2000-01-09 0.682819 -0.606846 -0.178411 -0.404127
2000-01-10 0.688583 0.127786 0.513832 -1.067156
Note - Vì kích thước cửa sổ là 3, đối với hai phần tử đầu tiên có giá trị rỗng và từ phần ba giá trị sẽ là giá trị trung bình của n, n-1 và n-2các yếu tố. Vì vậy, chúng ta cũng có thể áp dụng các chức năng khác nhau như đã đề cập ở trên.
.expanding () Hàm
Chức năng này có thể được áp dụng trên một loạt dữ liệu. Chỉ định lamin_periods=n lập luận và áp dụng hàm thống kê thích hợp trên nó.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df.expanding(min_periods=3).mean()
Nó là output như sau -
A B C D
2000-01-01 NaN NaN NaN NaN
2000-01-02 NaN NaN NaN NaN
2000-01-03 0.434553 -0.667940 -1.051718 -0.826452
2000-01-04 0.743328 -0.198015 -0.852462 -0.262547
2000-01-05 0.614776 -0.205649 -0.583641 -0.303254
2000-01-06 0.538175 -0.005878 -0.687223 -0.199219
2000-01-07 0.505503 -0.108475 -0.790826 -0.081056
2000-01-08 0.454751 -0.223420 -0.671572 -0.230215
2000-01-09 0.586390 -0.206201 -0.517619 -0.267521
2000-01-10 0.560427 -0.037597 -0.399429 -0.376886
.ewm () Hàm
ewmđược áp dụng trên một loạt dữ liệu. Chỉ định bất kỳ com, span,halflifelập luận và áp dụng hàm thống kê thích hợp trên nó. Nó chỉ định các trọng số theo cấp số nhân.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df.ewm(com=0.5).mean()
Nó là output như sau -
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 0.865131 -0.453626 -1.137961 0.058747
2000-01-03 -0.132245 -0.807671 -0.308308 -1.491002
2000-01-04 1.084036 0.555444 -0.272119 0.480111
2000-01-05 0.425682 0.025511 0.239162 -0.153290
2000-01-06 0.245094 0.671373 -0.725025 0.163310
2000-01-07 0.288030 -0.259337 -1.183515 0.473191
2000-01-08 0.162317 -0.771884 -0.285564 -0.692001
2000-01-09 1.147156 -0.302900 0.380851 -0.607976
2000-01-10 0.600216 0.885614 0.569808 -1.110113
Các chức năng của cửa sổ được sử dụng chủ yếu trong việc tìm kiếm xu hướng bên trong dữ liệu bằng đồ thị bằng cách làm mịn đường cong. Nếu dữ liệu hàng ngày có nhiều thay đổi và có sẵn nhiều điểm dữ liệu, thì lấy mẫu và vẽ biểu đồ là một phương pháp và áp dụng tính toán cửa sổ và vẽ biểu đồ trên kết quả là một phương pháp khác. Bằng những phương pháp này, chúng ta có thể làm mịn đường cong hoặc xu hướng.
Khi cuộn, mở rộng và ewm các đối tượng được tạo, một số phương pháp có sẵn để thực hiện tổng hợp dữ liệu.
Áp dụng Tổng hợp trên DataFrame
Hãy để chúng tôi tạo một DataFrame và áp dụng các tổng hợp trên đó.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r
Nó là output như sau -
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 0.790670 -0.387854 -0.668132 0.267283
2000-01-03 -0.575523 -0.965025 0.060427 -2.179780
2000-01-04 1.669653 1.211759 -0.254695 1.429166
2000-01-05 0.100568 -0.236184 0.491646 -0.466081
2000-01-06 0.155172 0.992975 -1.205134 0.320958
2000-01-07 0.309468 -0.724053 -1.412446 0.627919
2000-01-08 0.099489 -1.028040 0.163206 -1.274331
2000-01-09 1.639500 -0.068443 0.714008 -0.565969
2000-01-10 0.326761 1.479841 0.664282 -1.361169
Rolling [window=3,min_periods=1,center=False,axis=0]
Chúng tôi có thể tổng hợp bằng cách chuyển một hàm cho toàn bộ DataFrame hoặc chọn một cột thông qua tiêu chuẩn get item phương pháp.
Áp dụng Tổng hợp trên Toàn bộ Khung dữ liệu
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r.aggregate(np.sum)
Nó là output như sau -
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 1.879182 -1.038796 -3.215581 -0.299575
2000-01-03 1.303660 -2.003821 -3.155154 -2.479355
2000-01-04 1.884801 -0.141119 -0.862400 -0.483331
2000-01-05 1.194699 0.010551 0.297378 -1.216695
2000-01-06 1.925393 1.968551 -0.968183 1.284044
2000-01-07 0.565208 0.032738 -2.125934 0.482797
2000-01-08 0.564129 -0.759118 -2.454374 -0.325454
2000-01-09 2.048458 -1.820537 -0.535232 -1.212381
2000-01-10 2.065750 0.383357 1.541496 -3.201469
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 1.879182 -1.038796 -3.215581 -0.299575
2000-01-03 1.303660 -2.003821 -3.155154 -2.479355
2000-01-04 1.884801 -0.141119 -0.862400 -0.483331
2000-01-05 1.194699 0.010551 0.297378 -1.216695
2000-01-06 1.925393 1.968551 -0.968183 1.284044
2000-01-07 0.565208 0.032738 -2.125934 0.482797
2000-01-08 0.564129 -0.759118 -2.454374 -0.325454
2000-01-09 2.048458 -1.820537 -0.535232 -1.212381
2000-01-10 2.065750 0.383357 1.541496 -3.201469
Áp dụng tổng hợp trên một cột duy nhất của khung dữ liệu
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r['A'].aggregate(np.sum)
Nó là output như sau -
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 1.879182 -1.038796 -3.215581 -0.299575
2000-01-03 1.303660 -2.003821 -3.155154 -2.479355
2000-01-04 1.884801 -0.141119 -0.862400 -0.483331
2000-01-05 1.194699 0.010551 0.297378 -1.216695
2000-01-06 1.925393 1.968551 -0.968183 1.284044
2000-01-07 0.565208 0.032738 -2.125934 0.482797
2000-01-08 0.564129 -0.759118 -2.454374 -0.325454
2000-01-09 2.048458 -1.820537 -0.535232 -1.212381
2000-01-10 2.065750 0.383357 1.541496 -3.201469
2000-01-01 1.088512
2000-01-02 1.879182
2000-01-03 1.303660
2000-01-04 1.884801
2000-01-05 1.194699
2000-01-06 1.925393
2000-01-07 0.565208
2000-01-08 0.564129
2000-01-09 2.048458
2000-01-10 2.065750
Freq: D, Name: A, dtype: float64
Áp dụng Tổng hợp trên Nhiều Cột của DataFrame
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r[['A','B']].aggregate(np.sum)
Nó là output như sau -
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 1.879182 -1.038796 -3.215581 -0.299575
2000-01-03 1.303660 -2.003821 -3.155154 -2.479355
2000-01-04 1.884801 -0.141119 -0.862400 -0.483331
2000-01-05 1.194699 0.010551 0.297378 -1.216695
2000-01-06 1.925393 1.968551 -0.968183 1.284044
2000-01-07 0.565208 0.032738 -2.125934 0.482797
2000-01-08 0.564129 -0.759118 -2.454374 -0.325454
2000-01-09 2.048458 -1.820537 -0.535232 -1.212381
2000-01-10 2.065750 0.383357 1.541496 -3.201469
A B
2000-01-01 1.088512 -0.650942
2000-01-02 1.879182 -1.038796
2000-01-03 1.303660 -2.003821
2000-01-04 1.884801 -0.141119
2000-01-05 1.194699 0.010551
2000-01-06 1.925393 1.968551
2000-01-07 0.565208 0.032738
2000-01-08 0.564129 -0.759118
2000-01-09 2.048458 -1.820537
2000-01-10 2.065750 0.383357
Áp dụng nhiều hàm trên một cột duy nhất của DataFrame
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r['A'].aggregate([np.sum,np.mean])
Nó là output như sau -
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 1.879182 -1.038796 -3.215581 -0.299575
2000-01-03 1.303660 -2.003821 -3.155154 -2.479355
2000-01-04 1.884801 -0.141119 -0.862400 -0.483331
2000-01-05 1.194699 0.010551 0.297378 -1.216695
2000-01-06 1.925393 1.968551 -0.968183 1.284044
2000-01-07 0.565208 0.032738 -2.125934 0.482797
2000-01-08 0.564129 -0.759118 -2.454374 -0.325454
2000-01-09 2.048458 -1.820537 -0.535232 -1.212381
2000-01-10 2.065750 0.383357 1.541496 -3.201469
sum mean
2000-01-01 1.088512 1.088512
2000-01-02 1.879182 0.939591
2000-01-03 1.303660 0.434553
2000-01-04 1.884801 0.628267
2000-01-05 1.194699 0.398233
2000-01-06 1.925393 0.641798
2000-01-07 0.565208 0.188403
2000-01-08 0.564129 0.188043
2000-01-09 2.048458 0.682819
2000-01-10 2.065750 0.688583
Áp dụng nhiều hàm trên nhiều cột của DataFrame
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r[['A','B']].aggregate([np.sum,np.mean])
Nó là output như sau -
A B C D
2000-01-01 1.088512 -0.650942 -2.547450 -0.566858
2000-01-02 1.879182 -1.038796 -3.215581 -0.299575
2000-01-03 1.303660 -2.003821 -3.155154 -2.479355
2000-01-04 1.884801 -0.141119 -0.862400 -0.483331
2000-01-05 1.194699 0.010551 0.297378 -1.216695
2000-01-06 1.925393 1.968551 -0.968183 1.284044
2000-01-07 0.565208 0.032738 -2.125934 0.482797
2000-01-08 0.564129 -0.759118 -2.454374 -0.325454
2000-01-09 2.048458 -1.820537 -0.535232 -1.212381
2000-01-10 2.065750 0.383357 1.541496 -3.201469
A B
sum mean sum mean
2000-01-01 1.088512 1.088512 -0.650942 -0.650942
2000-01-02 1.879182 0.939591 -1.038796 -0.519398
2000-01-03 1.303660 0.434553 -2.003821 -0.667940
2000-01-04 1.884801 0.628267 -0.141119 -0.047040
2000-01-05 1.194699 0.398233 0.010551 0.003517
2000-01-06 1.925393 0.641798 1.968551 0.656184
2000-01-07 0.565208 0.188403 0.032738 0.010913
2000-01-08 0.564129 0.188043 -0.759118 -0.253039
2000-01-09 2.048458 0.682819 -1.820537 -0.606846
2000-01-10 2.065750 0.688583 0.383357 0.127786
Áp dụng các chức năng khác nhau cho các cột khác nhau của khung dữ liệu
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(3, 4),
index = pd.date_range('1/1/2000', periods=3),
columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r.aggregate({'A' : np.sum,'B' : np.mean})
Nó là output như sau -
A B C D
2000-01-01 -1.575749 -1.018105 0.317797 0.545081
2000-01-02 -0.164917 -1.361068 0.258240 1.113091
2000-01-03 1.258111 1.037941 -0.047487 0.867371
A B
2000-01-01 -1.575749 -1.018105
2000-01-02 -1.740666 -1.189587
2000-01-03 -0.482555 -0.447078
Thiếu dữ liệu luôn là một vấn đề trong các tình huống thực tế. Các lĩnh vực như máy học và khai thác dữ liệu phải đối mặt với các vấn đề nghiêm trọng về độ chính xác của các dự đoán mô hình của họ do chất lượng dữ liệu kém do các giá trị bị thiếu. Trong những lĩnh vực này, việc xử lý giá trị còn thiếu là một trọng tâm chính để làm cho các mô hình của họ chính xác và hợp lệ hơn.
Khi nào và Tại sao Dữ liệu bị Thiếu?
Hãy để chúng tôi xem xét một cuộc khảo sát trực tuyến cho một sản phẩm. Nhiều khi, mọi người không chia sẻ tất cả các thông tin liên quan đến họ. Ít người chia sẻ kinh nghiệm của họ, nhưng không phải là họ sử dụng sản phẩm trong bao lâu; ít người chia sẻ họ đã sử dụng sản phẩm trong bao lâu, trải nghiệm của họ nhưng không chia sẻ thông tin liên hệ của họ. Do đó, bằng cách nào đó hay cách khác, một phần dữ liệu luôn bị thiếu và điều này rất phổ biến trong thời gian thực.
Bây giờ chúng ta hãy xem cách chúng ta có thể xử lý các giá trị bị thiếu (giả sử NA hoặc NaN) bằng cách sử dụng Pandas.
# import the pandas library
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df
Nó là output như sau -
one two three
a 0.077988 0.476149 0.965836
b NaN NaN NaN
c -0.390208 -0.551605 -2.301950
d NaN NaN NaN
e -2.000303 -0.788201 1.510072
f -0.930230 -0.670473 1.146615
g NaN NaN NaN
h 0.085100 0.532791 0.887415
Bằng cách sử dụng lập chỉ mục lại, chúng tôi đã tạo DataFrame bị thiếu các giá trị. Trong đầu ra,NaN có nghĩa Not a Number.
Kiểm tra các giá trị bị thiếu
Để giúp phát hiện các giá trị bị thiếu dễ dàng hơn (và trên các loại mảng khác nhau), Pandas cung cấp isnull() và notnull() các hàm, cũng là các phương thức trên các đối tượng Series và DataFrame -
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df['one'].isnull()
Nó là output như sau -
a False
b True
c False
d True
e False
f False
g True
h False
Name: one, dtype: bool
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df['one'].notnull()
Nó là output như sau -
a True
b False
c True
d False
e True
f True
g False
h True
Name: one, dtype: bool
Các phép tính với dữ liệu bị thiếu
- Khi tổng hợp dữ liệu, NA sẽ được coi là Zero
- Nếu tất cả dữ liệu là NA thì kết quả sẽ là NA
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df['one'].sum()
Nó là output như sau -
2.02357685917
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])
print df['one'].sum()
Nó là output như sau -
nan
Làm sạch / lấp đầy dữ liệu bị thiếu
Pandas cung cấp nhiều phương pháp khác nhau để làm sạch các giá trị bị thiếu. Hàm fillna có thể “điền vào” các giá trị NA với dữ liệu không phải null theo một số cách, mà chúng tôi đã minh họa trong các phần sau.
Thay thế NaN bằng Giá trị vô hướng
Chương trình sau đây cho biết cách bạn có thể thay thế "NaN" bằng "0".
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one',
'two', 'three'])
df = df.reindex(['a', 'b', 'c'])
print df
print ("NaN replaced with '0':")
print df.fillna(0)
Nó là output như sau -
one two three
a -0.576991 -0.741695 0.553172
b NaN NaN NaN
c 0.744328 -1.735166 1.749580
NaN replaced with '0':
one two three
a -0.576991 -0.741695 0.553172
b 0.000000 0.000000 0.000000
c 0.744328 -1.735166 1.749580
Ở đây, chúng ta đang điền giá trị bằng 0; thay vào đó chúng ta cũng có thể điền vào bất kỳ giá trị nào khác.
Điền NA Forward và Backward
Sử dụng các khái niệm điền được thảo luận trong Chương ReIndexing, chúng tôi sẽ điền vào các giá trị còn thiếu.
Sr.No | Phương pháp & Hành động |
---|---|
1 | pad/fill Điền các phương thức Chuyển tiếp |
2 | bfill/backfill Điền các phương thức Backward |
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.fillna(method='pad')
Nó là output như sau -
one two three
a 0.077988 0.476149 0.965836
b 0.077988 0.476149 0.965836
c -0.390208 -0.551605 -2.301950
d -0.390208 -0.551605 -2.301950
e -2.000303 -0.788201 1.510072
f -0.930230 -0.670473 1.146615
g -0.930230 -0.670473 1.146615
h 0.085100 0.532791 0.887415
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.fillna(method='backfill')
Nó là output như sau -
one two three
a 0.077988 0.476149 0.965836
b -0.390208 -0.551605 -2.301950
c -0.390208 -0.551605 -2.301950
d -2.000303 -0.788201 1.510072
e -2.000303 -0.788201 1.510072
f -0.930230 -0.670473 1.146615
g 0.085100 0.532791 0.887415
h 0.085100 0.532791 0.887415
Giảm giá trị bị thiếu
Nếu bạn chỉ muốn loại trừ các giá trị bị thiếu, thì hãy sử dụng dropna chức năng cùng với axistranh luận. Theo mặc định, axis = 0, tức là dọc theo hàng, có nghĩa là nếu bất kỳ giá trị nào trong một hàng là NA thì toàn bộ hàng sẽ bị loại trừ.
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna()
Nó là output như sau -
one two three
a 0.077988 0.476149 0.965836
c -0.390208 -0.551605 -2.301950
e -2.000303 -0.788201 1.510072
f -0.930230 -0.670473 1.146615
h 0.085100 0.532791 0.887415
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna(axis=1)
Nó là output như sau -
Empty DataFrame
Columns: [ ]
Index: [a, b, c, d, e, f, g, h]
Thay thế các giá trị chung bị thiếu (hoặc)
Nhiều lần, chúng ta phải thay thế một giá trị chung bằng một giá trị cụ thể nào đó. Chúng ta có thể đạt được điều này bằng cách áp dụng phương pháp thay thế.
Thay thế NA bằng một giá trị vô hướng là hành vi tương đương của fillna() chức năng.
ví dụ 1
import pandas as pd
import numpy as np
df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})
print df.replace({1000:10,2000:60})
Nó là output như sau -
one two
0 10 10
1 20 0
2 30 30
3 40 40
4 50 50
5 60 60
Ví dụ 2
import pandas as pd
import numpy as np
df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})
print df.replace({1000:10,2000:60})
Nó là output như sau -
one two
0 10 10
1 20 0
2 30 30
3 40 40
4 50 50
5 60 60
Bất kì groupbyhoạt động liên quan đến một trong các hoạt động sau trên đối tượng ban đầu. Họ là -
Splitting đối tượng
Applying một chức năng
Combining kết quả
Trong nhiều tình huống, chúng tôi chia dữ liệu thành các tập hợp và chúng tôi áp dụng một số chức năng trên mỗi tập hợp con. Trong chức năng áp dụng, chúng tôi có thể thực hiện các thao tác sau:
Aggregation - tính toán một thống kê tóm tắt
Transformation - thực hiện một số hoạt động dành riêng cho nhóm
Filtration - loại bỏ dữ liệu với một số điều kiện
Bây giờ chúng ta hãy tạo một đối tượng DataFrame và thực hiện tất cả các thao tác trên nó -
#import the pandas library
import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
print df
Nó là output như sau -
Points Rank Team Year
0 876 1 Riders 2014
1 789 2 Riders 2015
2 863 2 Devils 2014
3 673 3 Devils 2015
4 741 3 Kings 2014
5 812 4 kings 2015
6 756 1 Kings 2016
7 788 1 Kings 2017
8 694 2 Riders 2016
9 701 4 Royals 2014
10 804 1 Royals 2015
11 690 2 Riders 2017
Chia dữ liệu thành các nhóm
Đối tượng Pandas có thể được chia thành bất kỳ đối tượng nào của chúng. Có nhiều cách để chia một đối tượng như -
- obj.groupby('key')
- obj.groupby(['key1','key2'])
- obj.groupby(key,axis=1)
Bây giờ chúng ta hãy xem cách các đối tượng nhóm có thể được áp dụng cho đối tượng DataFrame
Thí dụ
# import the pandas library
import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
print df.groupby('Team')
Nó là output như sau -
<pandas.core.groupby.DataFrameGroupBy object at 0x7fa46a977e50>
Xem nhóm
# import the pandas library
import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
print df.groupby('Team').groups
Nó là output như sau -
{'Kings': Int64Index([4, 6, 7], dtype='int64'),
'Devils': Int64Index([2, 3], dtype='int64'),
'Riders': Int64Index([0, 1, 8, 11], dtype='int64'),
'Royals': Int64Index([9, 10], dtype='int64'),
'kings' : Int64Index([5], dtype='int64')}
Thí dụ
Group by với nhiều cột -
# import the pandas library
import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
print df.groupby(['Team','Year']).groups
Nó là output như sau -
{('Kings', 2014): Int64Index([4], dtype='int64'),
('Royals', 2014): Int64Index([9], dtype='int64'),
('Riders', 2014): Int64Index([0], dtype='int64'),
('Riders', 2015): Int64Index([1], dtype='int64'),
('Kings', 2016): Int64Index([6], dtype='int64'),
('Riders', 2016): Int64Index([8], dtype='int64'),
('Riders', 2017): Int64Index([11], dtype='int64'),
('Devils', 2014): Int64Index([2], dtype='int64'),
('Devils', 2015): Int64Index([3], dtype='int64'),
('kings', 2015): Int64Index([5], dtype='int64'),
('Royals', 2015): Int64Index([10], dtype='int64'),
('Kings', 2017): Int64Index([7], dtype='int64')}
Lặp lại qua các Nhóm
Với groupby đối tượng trong tay, chúng ta có thể lặp qua đối tượng tương tự như itertools.obj.
# import the pandas library
import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
grouped = df.groupby('Year')
for name,group in grouped:
print name
print group
Nó là output như sau -
2014
Points Rank Team Year
0 876 1 Riders 2014
2 863 2 Devils 2014
4 741 3 Kings 2014
9 701 4 Royals 2014
2015
Points Rank Team Year
1 789 2 Riders 2015
3 673 3 Devils 2015
5 812 4 kings 2015
10 804 1 Royals 2015
2016
Points Rank Team Year
6 756 1 Kings 2016
8 694 2 Riders 2016
2017
Points Rank Team Year
7 788 1 Kings 2017
11 690 2 Riders 2017
Theo mặc định, groupby đối tượng có cùng tên nhãn với tên nhóm.
Chọn một nhóm
Sử dụng get_group() , chúng ta có thể chọn một nhóm duy nhất.
# import the pandas library
import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
grouped = df.groupby('Year')
print grouped.get_group(2014)
Nó là output như sau -
Points Rank Team Year
0 876 1 Riders 2014
2 863 2 Devils 2014
4 741 3 Kings 2014
9 701 4 Royals 2014
Tổng hợp
Một hàm tổng hợp trả về một giá trị tổng hợp duy nhất cho mỗi nhóm. Một khigroup by đối tượng được tạo, một số hoạt động tổng hợp có thể được thực hiện trên dữ liệu được nhóm.
Một điều rõ ràng là tổng hợp thông qua tổng hợp hoặc tương đương agg phương pháp -
# import the pandas library
import pandas as pd
import numpy as np
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
grouped = df.groupby('Year')
print grouped['Points'].agg(np.mean)
Nó là output như sau -
Year
2014 795.25
2015 769.50
2016 725.00
2017 739.00
Name: Points, dtype: float64
Một cách khác để xem kích thước của mỗi nhóm là áp dụng hàm size () -
import pandas as pd
import numpy as np
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
Attribute Access in Python Pandas
grouped = df.groupby('Team')
print grouped.agg(np.size)
Nó là output như sau -
Points Rank Year
Team
Devils 2 2 2
Kings 3 3 3
Riders 4 4 4
Royals 2 2 2
kings 1 1 1
Áp dụng nhiều hàm tổng hợp cùng một lúc
Với Sê-ri được nhóm lại, bạn cũng có thể vượt qua list hoặc là dict of functions để tổng hợp và tạo DataFrame dưới dạng đầu ra -
# import the pandas library
import pandas as pd
import numpy as np
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
grouped = df.groupby('Team')
print grouped['Points'].agg([np.sum, np.mean, np.std])
Nó là output như sau -
Team sum mean std
Devils 1536 768.000000 134.350288
Kings 2285 761.666667 24.006943
Riders 3049 762.250000 88.567771
Royals 1505 752.500000 72.831998
kings 812 812.000000 NaN
Sự biến đổi
Chuyển đổi trên một nhóm hoặc một cột trả về một đối tượng được lập chỉ mục có cùng kích thước với đối tượng đó đang được nhóm. Do đó, phép biến đổi sẽ trả về kết quả có cùng kích thước với kết quả của một đoạn nhóm.
# import the pandas library
import pandas as pd
import numpy as np
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
grouped = df.groupby('Team')
score = lambda x: (x - x.mean()) / x.std()*10
print grouped.transform(score)
Nó là output như sau -
Points Rank Year
0 12.843272 -15.000000 -11.618950
1 3.020286 5.000000 -3.872983
2 7.071068 -7.071068 -7.071068
3 -7.071068 7.071068 7.071068
4 -8.608621 11.547005 -10.910895
5 NaN NaN NaN
6 -2.360428 -5.773503 2.182179
7 10.969049 -5.773503 8.728716
8 -7.705963 5.000000 3.872983
9 -7.071068 7.071068 -7.071068
10 7.071068 -7.071068 7.071068
11 -8.157595 5.000000 11.618950
Lọc
Lọc sẽ lọc dữ liệu trên một tiêu chí xác định và trả về tập hợp con dữ liệu. Cácfilter() được sử dụng để lọc dữ liệu.
import pandas as pd
import numpy as np
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
print df.groupby('Team').filter(lambda x: len(x) >= 3)
Nó là output như sau -
Points Rank Team Year
0 876 1 Riders 2014
1 789 2 Riders 2015
4 741 3 Kings 2014
6 756 1 Kings 2016
7 788 1 Kings 2017
8 694 2 Riders 2016
11 690 2 Riders 2017
Trong điều kiện lọc ở trên, chúng tôi yêu cầu trả lại các đội đã tham gia IPL từ ba lần trở lên.
Pandas có các hoạt động kết hợp trong bộ nhớ đầy đủ tính năng, hiệu suất cao, về mặt thành ngữ, rất giống với cơ sở dữ liệu quan hệ như SQL.
Pandas cung cấp một chức năng duy nhất, merge, là điểm nhập cho tất cả các hoạt động kết hợp cơ sở dữ liệu tiêu chuẩn giữa các đối tượng DataFrame -
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)
Ở đây, chúng tôi đã sử dụng các tham số sau:
left - Một đối tượng DataFrame.
right - Một đối tượng DataFrame khác.
on- Các cột (tên) để tham gia. Phải được tìm thấy trong cả hai đối tượng DataFrame bên trái và bên phải.
left_on- Các cột từ DataFrame bên trái để sử dụng làm khóa. Có thể là tên cột hoặc mảng có độ dài bằng độ dài của DataFrame.
right_on- Các cột từ DataFrame bên phải để sử dụng làm khóa. Có thể là tên cột hoặc mảng có độ dài bằng độ dài của DataFrame.
left_index - Nếu True,sử dụng chỉ mục (nhãn hàng) từ DataFrame bên trái làm (các) khóa tham gia của nó. Trong trường hợp DataFrame có MultiIndex (phân cấp), số cấp phải khớp với số lượng khóa tham gia từ DataFrame bên phải.
right_index - Cách sử dụng tương tự như left_index cho đúng DataFrame.
how- Một trong các "trái", "phải", "ngoài", "trong". Mặc định là bên trong. Mỗi phương pháp đã được mô tả dưới đây.
sort- Sắp xếp kết quả DataFrame theo các phím nối theo thứ tự từ vựng. Mặc định thành True, đặt thành False sẽ cải thiện đáng kể hiệu suất trong nhiều trường hợp.
Bây giờ chúng ta hãy tạo hai DataFrame khác nhau và thực hiện các thao tác hợp nhất trên nó.
# import the pandas library
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
{'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right
Nó là output như sau -
Name id subject_id
0 Alex 1 sub1
1 Amy 2 sub2
2 Allen 3 sub4
3 Alice 4 sub6
4 Ayoung 5 sub5
Name id subject_id
0 Billy 1 sub2
1 Brian 2 sub4
2 Bran 3 sub3
3 Bryce 4 sub6
4 Betty 5 sub5
Hợp nhất hai DataFrames trên một khóa
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')
Nó là output như sau -
Name_x id subject_id_x Name_y subject_id_y
0 Alex 1 sub1 Billy sub2
1 Amy 2 sub2 Brian sub4
2 Allen 3 sub4 Bran sub3
3 Alice 4 sub6 Bryce sub6
4 Ayoung 5 sub5 Betty sub5
Hợp nhất hai DataFrames trên nhiều phím
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])
Nó là output như sau -
Name_x id subject_id Name_y
0 Alice 4 sub6 Bryce
1 Ayoung 5 sub5 Betty
Hợp nhất bằng cách sử dụng đối số 'how'
Các howđối số để hợp nhất chỉ định cách xác định khóa nào sẽ được đưa vào bảng kết quả. Nếu tổ hợp phím không xuất hiện trong bảng bên trái hoặc bên phải, các giá trị trong bảng đã kết hợp sẽ là NA.
Đây là một bản tóm tắt về how các tùy chọn và tên tương đương SQL của chúng -
Phương pháp hợp nhất | SQL tương đương | Sự miêu tả |
---|---|---|
trái | THAM GIA BÊN NGOÀI TRÁI | Sử dụng các phím từ đối tượng bên trái |
đúng | THAM GIA ĐÚNG | Sử dụng các phím từ đối tượng bên phải |
bên ngoài | THAM GIA NGOÀI TRỜI ĐẦY ĐỦ | Sử dụng liên hợp các khóa |
bên trong | THAM GIA INNER | Sử dụng giao điểm của các phím |
Chỗ nối bên trái
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')
Nó là output như sau -
Name_x id_x subject_id Name_y id_y
0 Alex 1 sub1 NaN NaN
1 Amy 2 sub2 Billy 1.0
2 Allen 3 sub4 Brian 2.0
3 Alice 4 sub6 Bryce 4.0
4 Ayoung 5 sub5 Betty 5.0
Tham gia đúng
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')
Nó là output như sau -
Name_x id_x subject_id Name_y id_y
0 Amy 2.0 sub2 Billy 1
1 Allen 3.0 sub4 Brian 2
2 Alice 4.0 sub6 Bryce 4
3 Ayoung 5.0 sub5 Betty 5
4 NaN NaN sub3 Bran 3
Tham gia bên ngoài
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')
Nó là output như sau -
Name_x id_x subject_id Name_y id_y
0 Alex 1.0 sub1 NaN NaN
1 Amy 2.0 sub2 Billy 1.0
2 Allen 3.0 sub4 Brian 2.0
3 Alice 4.0 sub6 Bryce 4.0
4 Ayoung 5.0 sub5 Betty 5.0
5 NaN NaN sub3 Bran 3.0
Tham gia bên trong
Tham gia sẽ được thực hiện trên chỉ mục. Hoạt động tham gia tôn vinh đối tượng mà nó được gọi. Vì thế,a.join(b) Không bằng b.join(a).
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')
Nó là output như sau -
Name_x id_x subject_id Name_y id_y
0 Amy 2 sub2 Billy 1
1 Allen 3 sub4 Brian 2
2 Alice 4 sub6 Bryce 4
3 Ayoung 5 sub5 Betty 5
Pandas cung cấp nhiều tiện ích khác nhau để dễ dàng kết hợp với nhau Series, DataFramevà Panel các đối tượng.
pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
objs - Đây là một chuỗi hoặc ánh xạ của các đối tượng Series, DataFrame hoặc Panel.
axis - {0, 1, ...}, mặc định là 0. Đây là trục để nối với nhau.
join- {'bên trong', 'bên ngoài'}, mặc định là 'bên ngoài'. Cách xử lý các chỉ mục trên (các) trục khác. Bên ngoài cho liên hiệp và bên trong cho giao lộ.
ignore_index- boolean, mặc định là Sai. Nếu Đúng, không sử dụng các giá trị chỉ mục trên trục nối. Trục kết quả sẽ được gắn nhãn 0, ..., n - 1.
join_axes- Đây là danh sách các đối tượng Index. Các chỉ mục cụ thể để sử dụng cho (n-1) trục khác thay vì thực hiện logic tập hợp bên trong / bên ngoài.
Nối các đối tượng
Các concatchức năng thực hiện tất cả các công việc nặng nhọc khi thực hiện các thao tác nối dọc theo một trục. Hãy để chúng tôi tạo các đối tượng khác nhau và thực hiện nối.
import pandas as pd
one = pd.DataFrame({
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5'],
'Marks_scored':[98,90,87,69,78]},
index=[1,2,3,4,5])
two = pd.DataFrame({
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5'],
'Marks_scored':[89,80,79,97,88]},
index=[1,2,3,4,5])
print pd.concat([one,two])
Nó là output như sau -
Marks_scored Name subject_id
1 98 Alex sub1
2 90 Amy sub2
3 87 Allen sub4
4 69 Alice sub6
5 78 Ayoung sub5
1 89 Billy sub2
2 80 Brian sub4
3 79 Bran sub3
4 97 Bryce sub6
5 88 Betty sub5
Giả sử chúng ta muốn liên kết các khóa cụ thể với từng phần của DataFrame đã được cắt nhỏ. Chúng ta có thể làm điều này bằng cách sử dụngkeys đối số -
import pandas as pd
one = pd.DataFrame({
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5'],
'Marks_scored':[98,90,87,69,78]},
index=[1,2,3,4,5])
two = pd.DataFrame({
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5'],
'Marks_scored':[89,80,79,97,88]},
index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'])
Nó là output như sau -
x 1 98 Alex sub1
2 90 Amy sub2
3 87 Allen sub4
4 69 Alice sub6
5 78 Ayoung sub5
y 1 89 Billy sub2
2 80 Brian sub4
3 79 Bran sub3
4 97 Bryce sub6
5 88 Betty sub5
Chỉ mục của kết quả được sao chép; mỗi chỉ mục được lặp lại.
Nếu đối tượng kết quả phải tuân theo lập chỉ mục của chính nó, hãy đặt ignore_index đến True.
import pandas as pd
one = pd.DataFrame({
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5'],
'Marks_scored':[98,90,87,69,78]},
index=[1,2,3,4,5])
two = pd.DataFrame({
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5'],
'Marks_scored':[89,80,79,97,88]},
index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'],ignore_index=True)
Nó là output như sau -
Marks_scored Name subject_id
0 98 Alex sub1
1 90 Amy sub2
2 87 Allen sub4
3 69 Alice sub6
4 78 Ayoung sub5
5 89 Billy sub2
6 80 Brian sub4
7 79 Bran sub3
8 97 Bryce sub6
9 88 Betty sub5
Quan sát, chỉ số thay đổi hoàn toàn và các Phím cũng bị ghi đè.
Nếu hai đối tượng cần được thêm vào axis=1, sau đó các cột mới sẽ được thêm vào.
import pandas as pd
one = pd.DataFrame({
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5'],
'Marks_scored':[98,90,87,69,78]},
index=[1,2,3,4,5])
two = pd.DataFrame({
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5'],
'Marks_scored':[89,80,79,97,88]},
index=[1,2,3,4,5])
print pd.concat([one,two],axis=1)
Nó là output như sau -
Marks_scored Name subject_id Marks_scored Name subject_id
1 98 Alex sub1 89 Billy sub2
2 90 Amy sub2 80 Brian sub4
3 87 Allen sub4 79 Bran sub3
4 69 Alice sub6 97 Bryce sub6
5 78 Ayoung sub5 88 Betty sub5
Kết nối bằng cách sử dụng append
Một phím tắt hữu ích để nối là các phương thức nối thêm phiên bản trên Series và DataFrame. Các phương thức này thực sự có trước concat. Chúng nối với nhauaxis=0, cụ thể là chỉ số -
import pandas as pd
one = pd.DataFrame({
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5'],
'Marks_scored':[98,90,87,69,78]},
index=[1,2,3,4,5])
two = pd.DataFrame({
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5'],
'Marks_scored':[89,80,79,97,88]},
index=[1,2,3,4,5])
print one.append(two)
Nó là output như sau -
Marks_scored Name subject_id
1 98 Alex sub1
2 90 Amy sub2
3 87 Allen sub4
4 69 Alice sub6
5 78 Ayoung sub5
1 89 Billy sub2
2 80 Brian sub4
3 79 Bran sub3
4 97 Bryce sub6
5 88 Betty sub5
Các append hàm cũng có thể lấy nhiều đối tượng -
import pandas as pd
one = pd.DataFrame({
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5'],
'Marks_scored':[98,90,87,69,78]},
index=[1,2,3,4,5])
two = pd.DataFrame({
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5'],
'Marks_scored':[89,80,79,97,88]},
index=[1,2,3,4,5])
print one.append([two,one,two])
Nó là output như sau -
Marks_scored Name subject_id
1 98 Alex sub1
2 90 Amy sub2
3 87 Allen sub4
4 69 Alice sub6
5 78 Ayoung sub5
1 89 Billy sub2
2 80 Brian sub4
3 79 Bran sub3
4 97 Bryce sub6
5 88 Betty sub5
1 98 Alex sub1
2 90 Amy sub2
3 87 Allen sub4
4 69 Alice sub6
5 78 Ayoung sub5
1 89 Billy sub2
2 80 Brian sub4
3 79 Bran sub3
4 97 Bryce sub6
5 88 Betty sub5
Chuỗi thời gian
Gấu trúc cung cấp một công cụ mạnh mẽ cho thời gian làm việc với dữ liệu Chuỗi thời gian, đặc biệt là trong lĩnh vực tài chính. Trong khi làm việc với dữ liệu chuỗi thời gian, chúng tôi thường gặp những điều sau:
- Tạo chuỗi thời gian
- Chuyển đổi chuỗi thời gian thành các tần số khác nhau
Pandas cung cấp một bộ công cụ tương đối nhỏ gọn và khép kín để thực hiện các tác vụ trên.
Nhận thời gian hiện tại
datetime.now() cung cấp cho bạn ngày và giờ hiện tại.
import pandas as pd
print pd.datetime.now()
Nó là output như sau -
2017-05-11 06:10:13.393147
Tạo TimeStamp
Dữ liệu có dấu thời gian là loại dữ liệu thời gian cơ bản nhất liên kết các giá trị với các điểm trong thời gian. Đối với các đối tượng gấu trúc, nó có nghĩa là sử dụng các điểm trong thời gian. Hãy lấy một ví dụ -
import pandas as pd
print pd.Timestamp('2017-03-01')
Nó là output như sau -
2017-03-01 00:00:00
Nó cũng có thể chuyển đổi số nguyên hoặc thời gian thực. Đơn vị mặc định cho những thứ này là nano giây (vì đây là cách Dấu thời gian được lưu trữ). Tuy nhiên, các kỷ nguyên thường được lưu trữ trong một đơn vị khác có thể được chỉ định. Hãy lấy một ví dụ khác
import pandas as pd
print pd.Timestamp(1587687255,unit='s')
Nó là output như sau -
2020-04-24 00:14:15
Tạo một khoảng thời gian
import pandas as pd
print pd.date_range("11:00", "13:30", freq="30min").time
Nó là output như sau -
[datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0)
datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]
Thay đổi tần suất thời gian
import pandas as pd
print pd.date_range("11:00", "13:30", freq="H").time
Nó là output như sau -
[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]
Chuyển đổi sang Dấu thời gian
Để chuyển đổi một Chuỗi hoặc đối tượng giống danh sách của các đối tượng giống ngày, ví dụ: chuỗi, kỷ nguyên hoặc hỗn hợp, bạn có thể sử dụng to_datetimechức năng. Khi được thông qua, nó trả về một Chuỗi (có cùng chỉ mục), trong khilist-like được chuyển đổi thành DatetimeIndex. Hãy xem ví dụ sau:
import pandas as pd
print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))
Nó là output như sau -
0 2009-07-31
1 2010-01-10
2 NaT
dtype: datetime64[ns]
NaT có nghĩa Not a Time (tương đương với NaN)
Hãy lấy một ví dụ khác.
import pandas as pd
print pd.to_datetime(['2005/11/23', '2010.12.31', None])
Nó là output như sau -
DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)
Mở rộng chuỗi Thời gian, các chức năng Ngày đóng vai trò chính trong phân tích dữ liệu tài chính. Trong khi làm việc với dữ liệu Ngày, chúng tôi sẽ thường xuyên gặp những điều sau:
- Tạo chuỗi ngày
- Chuyển đổi chuỗi ngày thành các tần số khác nhau
Tạo một phạm vi ngày
Sử dụng date.range()bằng cách chỉ định các khoảng thời gian và tần suất, chúng ta có thể tạo chuỗi ngày. Theo mặc định, tần suất của phạm vi là Ngày.
import pandas as pd
print pd.date_range('1/1/2011', periods=5)
Nó là output như sau -
DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
dtype='datetime64[ns]', freq='D')
Thay đổi tần suất ngày
import pandas as pd
print pd.date_range('1/1/2011', periods=5,freq='M')
Nó là output như sau -
DatetimeIndex(['2011-01-31', '2011-02-28', '2011-03-31', '2011-04-30', '2011-05-31'],
dtype='datetime64[ns]', freq='M')
bdate_range
bdate_range () là viết tắt của phạm vi ngày làm việc. Không giống như date_range (), nó không bao gồm thứ bảy và chủ nhật.
import pandas as pd
print pd.date_range('1/1/2011', periods=5)
Nó là output như sau -
DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
dtype='datetime64[ns]', freq='D')
Quan sát, sau ngày 3 tháng 3, ngày nhảy sang tháng 6 không kể ngày 4 và 5. Chỉ cần kiểm tra lịch của bạn cho các ngày.
Các chức năng tiện lợi như date_range và bdate_rangesử dụng nhiều bí danh tần số. Tần suất mặc định cho date_range là ngày dương lịch trong khi tần suất mặc định cho bdate_range là ngày làm việc.
import pandas as pd
start = pd.datetime(2011, 1, 1)
end = pd.datetime(2011, 1, 5)
print pd.date_range(start, end)
Nó là output như sau -
DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
dtype='datetime64[ns]', freq='D')
Đặt bí danh
Một số bí danh chuỗi được cung cấp cho các tần số chuỗi thời gian chung hữu ích. Chúng tôi sẽ gọi những bí danh này là bí danh bù đắp.
Bí danh | Sự miêu tả | Bí danh | Sự miêu tả |
---|---|---|---|
B | tần suất ngày làm việc | BQS | tần suất bắt đầu quý kinh doanh |
D | lịch ngày tần suất | A | tần suất kết thúc hàng năm (Năm) |
W | tần suất hàng tuần | ba | tần suất cuối năm kinh doanh |
M | tần suất cuối tháng | BAS | tần suất bắt đầu năm kinh doanh |
SM | tần suất cuối tháng | BH | tần suất giờ làm việc |
BM | tần suất cuối tháng làm việc | H | tần suất hàng giờ |
bệnh đa xơ cứng | tần suất bắt đầu tháng | T, phút | tần số nhỏ nhất |
tin nhắn | Tần suất bắt đầu SMS nửa tháng | S | thứ hai tần số |
BMS | tần suất bắt đầu tháng làm việc | L, ms | mili giây |
Q | tần suất cuối quý | U, chúng tôi | micro giây |
BQ | tần suất kết thúc quý kinh doanh | N | nano giây |
QS | tần suất bắt đầu quý |
Timedeltas là sự khác biệt về thời gian, được biểu thị bằng các đơn vị khác nhau, ví dụ, ngày, giờ, phút, giây. Chúng có thể là cả tích cực và tiêu cực.
Chúng ta có thể tạo các đối tượng Timedelta bằng cách sử dụng các đối số khác nhau như hình dưới đây:
Chuỗi
Bằng cách truyền một chuỗi ký tự, chúng ta có thể tạo một đối tượng hẹn giờ.
import pandas as pd
print pd.Timedelta('2 days 2 hours 15 minutes 30 seconds')
Nó là output như sau -
2 days 02:15:30
Số nguyên
Bằng cách chuyển một giá trị số nguyên với đơn vị, một đối số sẽ tạo ra một đối tượng Timedelta.
import pandas as pd
print pd.Timedelta(6,unit='h')
Nó là output như sau -
0 days 06:00:00
Dữ liệu Offsets
Các phần bù dữ liệu như - tuần, ngày, giờ, phút, giây, mili giây, micro giây, nano giây cũng có thể được sử dụng trong xây dựng.
import pandas as pd
print pd.Timedelta(days=2)
Nó là output như sau -
2 days 00:00:00
to_timedelta ()
Sử dụng cấp cao nhất pd.to_timedelta, bạn có thể chuyển đổi vô hướng, mảng, danh sách hoặc chuỗi từ định dạng / giá trị thời gian được công nhận thành kiểu Timedelta. Nó sẽ xây dựng Chuỗi nếu đầu vào là Chuỗi, một đại lượng vô hướng nếu đầu vào giống như vô hướng, ngược lại sẽ tạo ra mộtTimedeltaIndex.
import pandas as pd
print pd.Timedelta(days=2)
Nó là output như sau -
2 days 00:00:00
Hoạt động
Bạn có thể hoạt động trên Series / DataFrames và xây dựng timedelta64[ns] Chuỗi các phép toán trừ trên datetime64[ns] Chuỗi hoặc Dấu thời gian.
Bây giờ chúng ta hãy tạo một DataFrame với các đối tượng Timedelta và datetime và thực hiện một số phép toán số học trên nó -
import pandas as pd
s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
print df
Nó là output như sau -
A B
0 2012-01-01 0 days
1 2012-01-02 1 days
2 2012-01-03 2 days
Hoạt động bổ sung
import pandas as pd
s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
df['C']=df['A']+df['B']
print df
Nó là output như sau -
A B C
0 2012-01-01 0 days 2012-01-01
1 2012-01-02 1 days 2012-01-03
2 2012-01-03 2 days 2012-01-05
Phép toán trừ
import pandas as pd
s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
df['C']=df['A']+df['B']
df['D']=df['C']+df['B']
print df
Nó là output như sau -
A B C D
0 2012-01-01 0 days 2012-01-01 2012-01-01
1 2012-01-02 1 days 2012-01-03 2012-01-04
2 2012-01-03 2 days 2012-01-05 2012-01-07
Thông thường trong thời gian thực, dữ liệu bao gồm các cột văn bản, được lặp lại. Các tính năng như giới tính, quốc gia và mã luôn lặp lại. Đây là những ví dụ cho dữ liệu phân loại.
Các biến phân loại chỉ có thể nhận một số giá trị giới hạn và thường là cố định. Bên cạnh độ dài cố định, dữ liệu phân loại có thể có thứ tự nhưng không thể thực hiện thao tác số. Categorical là một kiểu dữ liệu Pandas.
Kiểu dữ liệu phân loại hữu ích trong các trường hợp sau:
Một biến chuỗi chỉ bao gồm một vài giá trị khác nhau. Chuyển đổi một biến chuỗi như vậy thành một biến phân loại sẽ tiết kiệm một số bộ nhớ.
Thứ tự từ vựng của một biến không giống với thứ tự lôgic (“một”, “hai”, “ba”). Bằng cách chuyển đổi thành phân loại và chỉ định thứ tự trên các danh mục, sắp xếp và min / max sẽ sử dụng thứ tự logic thay vì thứ tự từ vựng.
Như một tín hiệu cho các thư viện python khác rằng cột này nên được coi là một biến phân loại (ví dụ: sử dụng các phương pháp thống kê hoặc kiểu âm mưu phù hợp).
Tạo đối tượng
Đối tượng Categorical có thể được tạo theo nhiều cách. Các cách khác nhau đã được mô tả bên dưới -
thể loại
Bằng cách chỉ định loại dtype là "thể loại" trong tạo đối tượng gấu trúc.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print s
Nó là output như sau -
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
Số phần tử được chuyển đến đối tượng chuỗi là bốn, nhưng danh mục chỉ có ba. Quan sát tương tự trong các Danh mục đầu ra.
pd.Categorical
Sử dụng hàm tạo Categorical của gấu trúc tiêu chuẩn, chúng ta có thể tạo một đối tượng thể loại.
pandas.Categorical(values, categories, ordered)
Hãy lấy một ví dụ -
import pandas as pd
cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat
Nó là output như sau -
[a, b, c, a, b, c]
Categories (3, object): [a, b, c]
Hãy lấy một ví dụ khác -
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat
Nó là output như sau -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]
Ở đây, đối số thứ hai biểu thị các danh mục. Do đó, bất kỳ giá trị nào không có trong các danh mục sẽ được coi làNaN.
Bây giờ, hãy xem ví dụ sau:
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat
Nó là output như sau -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]
Về mặt logic, thứ tự có nghĩa là, a lớn hơn b và b lớn hơn c.
Sự miêu tả
Sử dụng .describe() trên dữ liệu phân loại, chúng tôi nhận được kết quả tương tự với Series hoặc là DataFrame sau đó type chuỗi.
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
print df.describe()
print df["cat"].describe()
Nó là output như sau -
cat s
count 3 3
unique 2 2
top c c
freq 2 2
count 3
unique 2
top c
freq 2
Name: cat, dtype: object
Nhận thuộc tính của danh mục
obj.cat.categories lệnh được sử dụng để lấy categories of the object.
import pandas as pd
import numpy as np
s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories
Nó là output như sau -
Index([u'b', u'a', u'c'], dtype='object')
obj.ordered lệnh được sử dụng để lấy thứ tự của đối tượng.
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered
Nó là output như sau -
False
Hàm trả về false bởi vì chúng tôi chưa chỉ định bất kỳ thứ tự nào.
Đổi tên danh mục
Việc đổi tên danh mục được thực hiện bằng cách gán các giá trị mới cho series.cat.categoriesthuộc tính series.cat.categories.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories
Nó là output như sau -
Index([u'Group a', u'Group b', u'Group c'], dtype='object')
Danh mục ban đầu [a,b,c] được cập nhật bởi s.cat.categories tài sản của đối tượng.
Thêm các danh mục mới
Sử dụng phương thức Categorical.add.categories (), các danh mục mới có thể được thêm vào.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories
Nó là output như sau -
Index([u'a', u'b', u'c', 4], dtype='object')
Xóa danh mục
Sử dụng Categorical.remove_categories() phương pháp, danh mục không mong muốn có thể được loại bỏ.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s
print ("After removal:")
print s.cat.remove_categories("a")
Nó là output như sau -
Original object:
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
After removal:
0 NaN
1 b
2 c
3 NaN
dtype: category
Categories (2, object): [b, c]
So sánh dữ liệu phân loại
So sánh dữ liệu phân loại với các đối tượng khác có thể trong ba trường hợp:
so sánh đẳng thức (== và! =) với một đối tượng dạng danh sách (danh sách, Chuỗi, mảng, ...) có cùng độ dài với dữ liệu phân loại.
tất cả các so sánh (==,! =,>,> =, <, và <=) của dữ liệu phân loại với một Chuỗi phân loại khác, khi có thứ tự == True và các danh mục giống nhau.
tất cả các so sánh của dữ liệu phân loại với dữ liệu vô hướng.
Hãy xem ví dụ sau:
import pandas as pd
cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)
print cat>cat1
Nó là output như sau -
0 False
1 False
2 True
dtype: bool
Plotting cơ bản: cốt truyện
Chức năng này trên Series và DataFrame chỉ là một trình bao bọc đơn giản xung quanh matplotlib libraries plot() phương pháp.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('1/1/2000',
periods=10), columns=list('ABCD'))
df.plot()
Nó là output như sau -
Nếu chỉ mục bao gồm ngày tháng, nó sẽ gọi gct().autofmt_xdate() để định dạng trục x như trong hình minh họa trên.
Chúng ta có thể vẽ một cột so với cột khác bằng cách sử dụng x và y từ khóa.
Các phương pháp vẽ đồ thị cho phép một số ít kiểu đồ thị khác với kiểu đồ thị đường mặc định. Các phương pháp này có thể được cung cấp dưới dạng đối số từ khóa loại choplot(). Chúng bao gồm -
- thanh hoặc barh cho các ô thanh
- lịch sử cho biểu đồ
- hộp cho boxplot
- 'khu vực' cho các lô khu vực
- 'phân tán' cho các âm mưu phân tán
Lô đất
Bây giờ chúng ta hãy xem Bar Plot là gì bằng cách tạo một Bar Plot. Một biểu đồ thanh có thể được tạo theo cách sau:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar()
Nó là output như sau -
Để tạo một biểu đồ thanh xếp chồng lên nhau, pass stacked=True -
import pandas as pd
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar(stacked=True)
Nó là output như sau -
Để lấy các biểu đồ thanh ngang, hãy sử dụng barh phương pháp -
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.barh(stacked=True)
Nó là output như sau -
Biểu đồ
Biểu đồ có thể được vẽ bằng cách sử dụng plot.hist()phương pháp. Chúng tôi có thể chỉ định số lượng thùng.
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
df.plot.hist(bins=20)
Nó là output như sau -
Để vẽ các biểu đồ khác nhau cho mỗi cột, hãy sử dụng mã sau:
import pandas as pd
import numpy as np
df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
df.diff.hist(bins=20)
Nó là output như sau -
Ô hộp
Boxplot có thể được gọi Series.box.plot() và DataFrame.box.plot(), hoặc là DataFrame.boxplot() để trực quan hóa sự phân bố các giá trị trong mỗi cột.
Ví dụ, đây là một biểu đồ hình hộp đại diện cho năm thử nghiệm của 10 quan sát của một biến ngẫu nhiên đồng nhất trên [0,1).
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()
Nó là output như sau -
Khu vực lô đất
Biểu đồ khu vực có thể được tạo bằng cách sử dụng Series.plot.area() hoặc là DataFrame.plot.area() các phương pháp.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()
Nó là output như sau -
Lô phân tán
Biểu đồ phân tán có thể được tạo bằng cách sử dụng DataFrame.plot.scatter() các phương pháp.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')
Nó là output như sau -
Biểu đồ tròn
Biểu đồ hình tròn có thể được tạo bằng cách sử dụng DataFrame.plot.pie() phương pháp.
import pandas as pd
import numpy as np
df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)
Nó là output như sau -
Các Pandas I/O API là một tập hợp các chức năng của trình đọc cấp cao nhất được truy cập như pd.read_csv() thường trả về một đối tượng Pandas.
Hai hàm workhorse để đọc các tệp văn bản (hoặc các tệp phẳng) là read_csv() và read_table(). Cả hai đều sử dụng cùng một mã phân tích cú pháp để chuyển đổi dữ liệu dạng bảng một cách thông minh thànhDataFrame đối tượng -
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
names=None, index_col=None, usecols=None
pandas.read_csv(filepath_or_buffer, sep='\t', delimiter=None, header='infer',
names=None, index_col=None, usecols=None
Đây là cách csv dữ liệu tệp trông giống như -
S.No,Name,Age,City,Salary
1,Tom,28,Toronto,20000
2,Lee,32,HongKong,3000
3,Steven,43,Bay Area,8300
4,Ram,38,Hyderabad,3900
Lưu dữ liệu này thành temp.csv và tiến hành các hoạt động trên đó.
S.No,Name,Age,City,Salary
1,Tom,28,Toronto,20000
2,Lee,32,HongKong,3000
3,Steven,43,Bay Area,8300
4,Ram,38,Hyderabad,3900
Lưu dữ liệu này thành temp.csv và tiến hành các hoạt động trên đó.
read.csv
read.csv đọc dữ liệu từ các tệp csv và tạo một đối tượng DataFrame.
import pandas as pd
df=pd.read_csv("temp.csv")
print df
Nó là output như sau -
S.No Name Age City Salary
0 1 Tom 28 Toronto 20000
1 2 Lee 32 HongKong 3000
2 3 Steven 43 Bay Area 8300
3 4 Ram 38 Hyderabad 3900
chỉ mục tùy chỉnh
Điều này chỉ định một cột trong tệp csv để tùy chỉnh chỉ mục bằng cách sử dụng index_col.
import pandas as pd
df=pd.read_csv("temp.csv",index_col=['S.No'])
print df
Nó là output như sau -
S.No Name Age City Salary
1 Tom 28 Toronto 20000
2 Lee 32 HongKong 3000
3 Steven 43 Bay Area 8300
4 Ram 38 Hyderabad 3900
Người chuyển đổi
dtype trong số các cột có thể được chuyển dưới dạng chính tả.
import pandas as pd
df = pd.read_csv("temp.csv", dtype={'Salary': np.float64})
print df.dtypes
Nó là output như sau -
S.No int64
Name object
Age int64
City object
Salary float64
dtype: object
Theo mặc định, dtype của cột Lương là int, nhưng kết quả cho thấy nó là float bởi vì chúng tôi đã ép kiểu rõ ràng.
Do đó, dữ liệu trông giống như float -
S.No Name Age City Salary
0 1 Tom 28 Toronto 20000.0
1 2 Lee 32 HongKong 3000.0
2 3 Steven 43 Bay Area 8300.0
3 4 Ram 38 Hyderabad 3900.0
header_names
Chỉ định tên của tiêu đề bằng cách sử dụng đối số tên.
import pandas as pd
df=pd.read_csv("temp.csv", names=['a', 'b', 'c','d','e'])
print df
Nó là output như sau -
a b c d e
0 S.No Name Age City Salary
1 1 Tom 28 Toronto 20000
2 2 Lee 32 HongKong 3000
3 3 Steven 43 Bay Area 8300
4 4 Ram 38 Hyderabad 3900
Hãy quan sát, tên tiêu đề được nối với tên tùy chỉnh, nhưng tiêu đề trong tệp vẫn chưa bị loại bỏ. Bây giờ, chúng tôi sử dụng đối số tiêu đề để loại bỏ điều đó.
Nếu tiêu đề nằm trong một hàng khác với tiêu đề đầu tiên, hãy chuyển số hàng cho tiêu đề. Thao tác này sẽ bỏ qua các hàng trước đó.
import pandas as pd
df=pd.read_csv("temp.csv",names=['a','b','c','d','e'],header=0)
print df
Nó là output như sau -
a b c d e
0 S.No Name Age City Salary
1 1 Tom 28 Toronto 20000
2 2 Lee 32 HongKong 3000
3 3 Steven 43 Bay Area 8300
4 4 Ram 38 Hyderabad 3900
người bỏ qua
bỏ qua bỏ qua số hàng được chỉ định.
import pandas as pd
df=pd.read_csv("temp.csv", skiprows=2)
print df
Nó là output như sau -
2 Lee 32 HongKong 3000
0 3 Steven 43 Bay Area 8300
1 4 Ram 38 Hyderabad 3900
Đối tượng thưa thớt được "nén" khi bất kỳ dữ liệu nào khớp với một giá trị cụ thể (NaN / giá trị bị thiếu, mặc dù có thể chọn bất kỳ giá trị nào). Một đối tượng SparseIndex đặc biệt theo dõi vị trí dữ liệu đã được "chia nhỏ". Điều này sẽ có ý nghĩa hơn trong một ví dụ. Tất cả các cấu trúc dữ liệu Pandas chuẩn đều áp dụngto_sparse phương pháp -
import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts
Nó là output như sau -
0 -0.810497
1 -1.419954
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 0.439240
9 -1.095910
dtype: float64
BlockIndex
Block locations: array([0, 8], dtype=int32)
Block lengths: array([2, 2], dtype=int32)
Các đối tượng thưa thớt tồn tại vì lý do hiệu quả của bộ nhớ.
Bây giờ chúng tôi giả sử bạn có một NA DataFrame lớn và thực thi đoạn mã sau:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10000, 4))
df.ix[:9998] = np.nan
sdf = df.to_sparse()
print sdf.density
Nó là output như sau -
0.0001
Bất kỳ đối tượng thưa thớt nào cũng có thể được chuyển đổi trở lại dạng dày đặc tiêu chuẩn bằng cách gọi to_dense -
import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts.to_dense()
Nó là output như sau -
0 -0.810497
1 -1.419954
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 0.439240
9 -1.095910
dtype: float64
Kiểu thưa thớt
Dữ liệu thưa thớt phải có cùng loại với kiểu biểu diễn dày đặc của nó. Hiện tại,float64, int64 và booldtypesđược hỗ trợ. Tùy thuộc vào bản gốcdtype, fill_value default thay đổi -
float64 - np.nan
int64 - 0
bool - Sai
Hãy để chúng tôi thực thi đoạn mã sau để hiểu tương tự -
import pandas as pd
import numpy as np
s = pd.Series([1, np.nan, np.nan])
print s
s.to_sparse()
print s
Nó là output như sau -
0 1.0
1 NaN
2 NaN
dtype: float64
0 1.0
1 NaN
2 NaN
dtype: float64
Caveats có nghĩa là cảnh báo và gotcha có nghĩa là một vấn đề không thể nhìn thấy.
Sử dụng câu lệnh If / Truth với gấu trúc
Gấu trúc tuân theo quy ước numpy về việc gây ra lỗi khi bạn cố chuyển đổi thứ gì đó thành bool. Điều này xảy ra trong mộtif hoặc là when sử dụng các phép toán Boolean và, or, hoặc là not. Không rõ kết quả sẽ như thế nào. Nó có nên là True bởi vì nó không phải là zerolength? Sai vì có giá trị Sai? Nó không rõ ràng, vì vậy thay vào đó, Pandas tăng mộtValueError -
import pandas as pd
if pd.Series([False, True, False]):
print 'I am True'
Nó là output như sau -
ValueError: The truth value of a Series is ambiguous.
Use a.empty, a.bool() a.item(),a.any() or a.all().
Trong ifđiều kiện, không rõ phải làm gì với nó. Lỗi này gợi ý về việc có nên sử dụngNone hoặc là any of those.
import pandas as pd
if pd.Series([False, True, False]).any():
print("I am any")
Nó là output như sau -
I am any
Để đánh giá các đối tượng gấu trúc một phần tử trong ngữ cảnh Boolean, hãy sử dụng phương pháp .bool() -
import pandas as pd
print pd.Series([True]).bool()
Nó là output như sau -
True
Bitwise Boolean
Các toán tử Boolean của Bitwise như == và != sẽ trả về một chuỗi Boolean, hầu như luôn luôn là chuỗi bắt buộc.
import pandas as pd
s = pd.Series(range(5))
print s==4
Nó là output như sau -
0 False
1 False
2 False
3 False
4 True
dtype: bool
hoạt động isin
Điều này trả về một chuỗi Boolean cho biết liệu mỗi phần tử trong Chuỗi có được chứa chính xác trong chuỗi giá trị đã truyền hay không.
import pandas as pd
s = pd.Series(list('abc'))
s = s.isin(['a', 'c', 'e'])
print s
Nó là output như sau -
0 True
1 False
2 True
dtype: bool
Reindexing vs ix Gotcha
Nhiều người dùng sẽ thấy mình sử dụng ix indexing capabilities như một phương tiện ngắn gọn để chọn dữ liệu từ một đối tượng Pandas -
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))
print df
print df.ix[['b', 'c', 'e']]
Nó là output như sau -
one two three four
a -1.582025 1.335773 0.961417 -1.272084
b 1.461512 0.111372 -0.072225 0.553058
c -1.240671 0.762185 1.511936 -0.630920
d -2.380648 -0.029981 0.196489 0.531714
e 1.846746 0.148149 0.275398 -0.244559
f -1.842662 -0.933195 2.303949 0.677641
one two three four
b 1.461512 0.111372 -0.072225 0.553058
c -1.240671 0.762185 1.511936 -0.630920
e 1.846746 0.148149 0.275398 -0.244559
Tất nhiên, trong trường hợp này, điều này hoàn toàn tương đương với việc sử dụng reindex phương pháp -
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))
print df
print df.reindex(['b', 'c', 'e'])
Nó là output như sau -
one two three four
a 1.639081 1.369838 0.261287 -1.662003
b -0.173359 0.242447 -0.494384 0.346882
c -0.106411 0.623568 0.282401 -0.916361
d -1.078791 -0.612607 -0.897289 -1.146893
e 0.465215 1.552873 -1.841959 0.329404
f 0.966022 -0.190077 1.324247 0.678064
one two three four
b -0.173359 0.242447 -0.494384 0.346882
c -0.106411 0.623568 0.282401 -0.916361
e 0.465215 1.552873 -1.841959 0.329404
Một số có thể kết luận rằng ix và reindex100% tương đương dựa trên điều này. Điều này đúng ngoại trừ trường hợp lập chỉ mục số nguyên. Ví dụ, hoạt động trên có thể được biểu diễn theo cách khác là:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))
print df
print df.ix[[1, 2, 4]]
print df.reindex([1, 2, 4])
Nó là output như sau -
one two three four
a -1.015695 -0.553847 1.106235 -0.784460
b -0.527398 -0.518198 -0.710546 -0.512036
c -0.842803 -1.050374 0.787146 0.205147
d -1.238016 -0.749554 -0.547470 -0.029045
e -0.056788 1.063999 -0.767220 0.212476
f 1.139714 0.036159 0.201912 0.710119
one two three four
b -0.527398 -0.518198 -0.710546 -0.512036
c -0.842803 -1.050374 0.787146 0.205147
e -0.056788 1.063999 -0.767220 0.212476
one two three four
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
4 NaN NaN NaN NaN
Điều quan trọng cần nhớ là reindex is strict label indexing only. Điều này có thể dẫn đến một số kết quả có khả năng gây ngạc nhiên trong các trường hợp bệnh lý khi một chỉ mục chứa cả số nguyên và chuỗi.
Vì nhiều người dùng Pandas tiềm năng đã quen thuộc với SQL, trang này nhằm cung cấp một số ví dụ về cách có thể thực hiện các hoạt động SQL khác nhau bằng cách sử dụng gấu trúc.
import pandas as pd
url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'
tips=pd.read_csv(url)
print tips.head()
Nó là output như sau -
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
LỰA CHỌN
Trong SQL, lựa chọn được thực hiện bằng cách sử dụng danh sách các cột được phân tách bằng dấu phẩy mà bạn chọn (hoặc dấu * để chọn tất cả các cột) -
SELECT total_bill, tip, smoker, time
FROM tips
LIMIT 5;
Với Pandas, việc chọn cột được thực hiện bằng cách chuyển danh sách tên cột vào DataFrame của bạn -
tips[['total_bill', 'tip', 'smoker', 'time']].head(5)
Hãy kiểm tra toàn bộ chương trình -
import pandas as pd
url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'
tips=pd.read_csv(url)
print tips[['total_bill', 'tip', 'smoker', 'time']].head(5)
Nó là output như sau -
total_bill tip smoker time
0 16.99 1.01 No Dinner
1 10.34 1.66 No Dinner
2 21.01 3.50 No Dinner
3 23.68 3.31 No Dinner
4 24.59 3.61 No Dinner
Gọi DataFrame mà không có danh sách tên cột sẽ hiển thị tất cả các cột (tương tự như SQL's *).
Ở ĐÂU
Lọc trong SQL được thực hiện thông qua mệnh đề WHERE.
SELECT * FROM tips WHERE time = 'Dinner' LIMIT 5;
DataFrames có thể được lọc theo nhiều cách; trực quan nhất trong số đó là sử dụng lập chỉ mục Boolean.
tips[tips['time'] == 'Dinner'].head(5)
Hãy kiểm tra toàn bộ chương trình -
import pandas as pd
url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'
tips=pd.read_csv(url)
print tips[tips['time'] == 'Dinner'].head(5)
Nó là output như sau -
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
Câu lệnh trên chuyển một loạt các đối tượng True / False đến DataFrame, trả về tất cả các hàng có True.
GroupBy
Thao tác này tìm nạp số lượng bản ghi trong mỗi nhóm trong toàn bộ tập dữ liệu. Ví dụ: một truy vấn lấy cho chúng ta số mẹo do giới tính để lại -
SELECT sex, count(*)
FROM tips
GROUP BY sex;
Tương đương với Pandas sẽ là -
tips.groupby('sex').size()
Hãy kiểm tra toàn bộ chương trình -
import pandas as pd
url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'
tips=pd.read_csv(url)
print tips.groupby('sex').size()
Nó là output như sau -
sex
Female 87
Male 157
dtype: int64
N hàng trên cùng
SQL trả về top n rows sử dụng LIMIT -
SELECT * FROM tips
LIMIT 5 ;
Tương đương với Pandas sẽ là -
tips.head(5)
Hãy kiểm tra ví dụ đầy đủ -
import pandas as pd
url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'
tips=pd.read_csv(url)
tips = tips[['smoker', 'day', 'time']].head(5)
print tips
Nó là output như sau -
smoker day time
0 No Sun Dinner
1 No Sun Dinner
2 No Sun Dinner
3 No Sun Dinner
4 No Sun Dinner
Đây là một vài thao tác cơ bản mà chúng tôi đã so sánh, mà chúng tôi đã học được, trong các chương trước của Thư viện Pandas.