Thư viện pandas trong python đã trở thành công cụ hỗ trợ không thể thiếu trong việc xử lý và phân tích dữ liệu. Bài viết này sẽ giới thiệu về thư viện pandas và cung cấp những thông tin hữu ích về cách sử dụng.
Thư viện pandas python là gì?
Thư viện pandas trong python là một thư viện mã nguồn mở, được xây dựng để hỗ trợ thao tác và xử lý dữ liệu một cách linh hoạt và mạnh mẽ. Thư viện này sử dụng cấu trúc dữ liệu riêng là Dataframe để lưu trữ và xử lý dữ liệu. Pandas cung cấp rất nhiều chức năng để xử lý và làm việc trên Dataframe. Điều này đã khiến pandas trở thành một thư viện rất phổ biến trong cả nghiên cứu và phát triển các ứng dụng về khoa học dữ liệu.
Tại sao lại dùng thư viện pandas?
Thư viện pandas có nhiều ưu điểm và cung cấp các tính năng hữu ích cho việc xử lý dữ liệu. Dưới đây là một số lợi ích của việc sử dụng thư viện này:
- DataFrame đem lại sự linh hoạt và hiệu quả trong thao tác dữ liệu và lập chỉ mục.
- Là một công cụ cho phép đọc/ghi dữ liệu giữa bộ nhớ và nhiều định dạng file như csv, text, excel, sql database, hdf5.
- Liên kết dữ liệu thông minh và xử lý được trường hợp dữ liệu bị thiếu. Tự động đưa dữ liệu lộn xộn về dạng có cấu trúc.
- Dễ dàng thay đổi bố cục của dữ liệu.
- Tích hợp cơ chế trượt, lập chỉ mục, lấy ra tập con từ tập dữ liệu lớn.
- Có thể thêm, xóa các cột dữ liệu.
- Tập hợp hoặc thay đổi dữ liệu với group by cho phép bạn thực hiện các toán tử trên tập dữ liệu.
- Hiệu quả cao trong trộn và kết hợp các tập dữ liệu.
- Lập chỉ mục theo các chiều của dữ liệu giúp thao tác giữa dữ liệu cao chiều và dữ liệu thấp chiều.
- Tối ưu về hiệu năng.
- Pandas được sử dụng rộng rãi trong cả học thuật và thương mại, bao gồm thống kê, thương mại, phân tích, quảng cáo...
Đọc file csv sử dụng thư viện pandas
Bạn có thể dễ dàng đọc vào một file .csv bằng cách sử dụng hàm read_csv
và được trả về một DataFrame. Mặc định, hàm này sẽ phân biệt các trường của file csv theo dấu phẩy. Cách đọc rất đơn giản như sau:
peoples_df = pd.read_csv('./people.csv')
Bạn có thể in ra n bản ghi đầu tiên của dataframe sử dụng hàm head
. Ngược lại của hàm head
là hàm tail
:
peoples_df.head(5)
Tuy nhiên, bạn cũng sẽ phải lưu ý một vài tham số của hàm read_csv
như:
encoding
: chỉ định encoding của file đọc vào. Mặc định là utf-8.sep
: thay đổi dấu ngăn cách giữa các cột. Mặc định là dấu phẩy (,).header
: chỉ định file đọc vào có header (tiêu đề của các cột) hay không. Mặc định là infer.index_col
: chỉ định chỉ số cột nào là cột chỉ số (số thứ tự). Mặc định là None.nrows
: chỉ định số bản ghi sẽ đọc vào. Mặc định là None - đọc toàn bộ.
peoples_df = pd.read_csv('./people.csv', encoding='utf-8', header=None, sep=',')
peoples_df.head(5)
Thao tác với dataframe trong pandas
Khi bạn đọc file csv như phần trước, biến peoples_df
sẽ là một đối tượng có hàng, cột gọi là DataFrame. Vậy nếu bạn muốn lấy giá trị theo hàng hoặc cột cụ thể nào đó thì làm như nào?
Thư viện pandas cung cấp rất nhiều hàm hữu ích cho phép bạn thao tác với đối tượng dữ liệu DataFrame này. Dưới đây là một số cách bạn có thể thực hiện:
Truy xuất dữ liệu trên dataframe
Lấy 1 cột theo tên cột
Để chỉ định cột muốn lấy, bạn chỉ cần truyền vào tên cột. Ví dụ muốn lấy cột "name":
peoples_df['name']
Lấy theo nhiều cột
Thay vì truyền vào 1 string thì hãy truyền vào 1 list các tên cột. Ví dụ muốn lấy cột "name" và "age":
peoples_df[['name', 'age']]
Lấy bản ghi theo chỉ số
Để lấy một hoặc nhiều bản ghi liên tiếp trong dataframe, sử dụng cơ chế trượt theo chỉ số giống như trên list trong python. Ví dụ lấy 5 bản ghi đầu tiên:
peoples_df[0:5]
Bạn cũng có thể kết hợp lấy theo hàng và cột mong muốn:
peoples_df[['name', 'age']][:5]
Lấy các bản ghi theo điều kiện
Để lấy các bản ghi dựa trên một điều kiện, bạn có thể sử dụng các toán tử so sánh và truyền vào câu điều kiện. Ví dụ lấy tất cả các bản ghi có tuổi nhỏ hơn 25:
young_pp = peoples_df[peoples_df['age'] < 25]
young_pp[:5]
Lấy giá trị trả về numpy arrays
Để lấy giá trị của một cột trả về dưới dạng numpy array, bạn chỉ cần thêm .values
vào sau. Ví dụ lấy giá trị của cột "name":
peoples_df['name'].values
Thêm, sửa, xóa trong dataframe
Thêm cột từ dữ liệu mới
Để thêm cột vào một dataframe có sẵn, bạn cần có một list dữ liệu tương ứng với cột mà bạn muốn thêm. Tức là chiều dài của list phải tương ứng với số bản ghi của dataframe bạn muốn thêm. Ví dụ thêm cột "birthday":
df_len = len(peoples_df)
birthday = [random.randrange(1980, 2000, 1) for i in range(df_len)]
peoples_df['birthday'] = birthday
peoples_df.tail(5)
Thêm cột dựa vào dữ liệu đã có
Nếu bạn muốn thêm một cột dựa trên dữ liệu đã có, bạn cũng có thể thực hiện như trên. Ví dụ thêm cột "is_young" có giá trị True nếu tuổi < 25 và False trong trường hợp còn lại:
peoples_df['is_young'] = peoples_df['age'] < 25
peoples_df.head(5)
Xóa cột trong dataframe
Để xóa một cột, bạn có thể sử dụng phương thức drop
của dataframe. Ví dụ xóa cột "name":
peoples_df.drop('name', axis=1) # Xóa 1 cột
Bạn cũng có thể xóa nhiều cột cùng lúc bằng cách truyền vào một list các tên cột:
peoples_df.drop(['column1', 'column2'], axis=1) # Xóa nhiều cột
Xóa bản ghi theo chỉ số
Để xóa một hoặc nhiều bản ghi dựa trên chỉ số, bạn cũng có thể sử dụng phương thức drop
. Ví dụ xóa bản ghi ở chỉ số 1 và 2:
peoples_df.drop([1, 2]) # Xóa bản ghi ở chỉ số 1 và 2
Hiểu dữ liệu trong dataframe
Thư viện pandas cung cấp cho bạn nhiều hàm để hiểu về dữ liệu trong dataframe. Dưới đây là một số hàm hữu ích:
Xem thông tin của dataframe
Để xem thông tin chi tiết về dataframe, bạn có thể sử dụng hàm info
hoặc xem kích thước của dataframe bằng thuộc tính shape
:
print('Len:', len(peoples_df)) # Xem chiều dài của df
peoples_df.info() # Xem thông tin dataframe
print('Shape:', peoples_df.shape) # Xem kích thước của dataframe
Xem thống kê dữ liệu trong dataframe
Hàm describe
sẽ cho bạn các thông số thống kê cơ bản về dữ liệu:
peoples_df.describe()
Nếu bạn quan tâm tới phân bố của một trường dữ liệu, bạn có thể sử dụng hàm value_counts
:
peoples_df['age'].value_counts()
Vẽ đồ thị
Bạn cũng có thể sử dụng thư viện matplotlib để vẽ đồ thị và xem phân bố giá trị của một trường trong dataframe. Ví dụ vẽ biểu đồ cột phân bố các giá trị của trường "age":
peoples_df['age'].value_counts().plot(kind='bar')
Lưu dataframe về file csv
Thư viện pandas cho phép bạn lưu lại dataframe thành các file csv chỉ với một dòng code. Ví dụ lưu dataframe vào file "comments.csv":
df.to_csv('comments.csv')
Tài liệu tham khảo
- Pandas Cookbook: https://github.com/jvns/pandas-cookbook
- Official Document: https://pandas.pydata.org/index.html