Trong bài viết này, tôi đã tổng hợp những câu hỏi phỏng vấn Pandas thường gặp nhất kèm theo câu trả lời. Một số câu hỏi đến từ chính trải nghiệm phỏng vấn của tôi tại Target cho vị trí nhà khoa học dữ liệu. Bắt đầu nhé!
Câu hỏi phỏng vấn Pandas cơ bản
Hãy xem qua một số câu hỏi cơ bản về pandas. Những người phỏng vấn dễ tính có thể bắt đầu bằng các câu hỏi đơn giản này để giúp bạn thoải mái lúc đầu, trong khi người khác có thể hỏi để đánh giá mức độ nắm vững thư viện của bạn.
1. Pandas trong Python là gì?
pandas là một thư viện Python mã nguồn mở với các phương thức mạnh mẽ, tích hợp sẵn để làm sạch, phân tích và thao tác dữ liệu hiệu quả. Được Wes McKinney phát triển vào năm 2008, gói mạnh mẽ này có thể dễ dàng kết hợp với nhiều mô-đun khoa học dữ liệu khác trong Python.
Ban đầu được xây dựng dựa trên NumPy, pandas hiện đại (v2.0+) cũng hỗ trợ backend PyArrow. Điều này cho phép thao tác nhanh hơn đáng kể, kiểu dữ liệu chuỗi thực sự, và xử lý giá trị khuyết tốt hơn (kiểu nullable) so với kiến trúc cũ chỉ dùng NumPy.
2. Làm sao truy cập nhanh 5 hàng đầu và 5 hàng cuối của DataFrame trong pandas?
Phương thức head() trong pandas được dùng để truy cập 5 hàng đầu của DataFrame, và phương thức tail() dùng để truy cập 5 hàng cuối.
Truy cập 5 hàng đầu:dataframe_name.head()
Truy cập 5 hàng cuối:dataframe_name.tail()
3. Vì sao DataFrame.shape không có ngoặc đơn?
Trong pandas, shape là một thuộc tính chứ không phải phương thức. Vì vậy, bạn truy cập nó không cần ngoặc đơn.
DataFrame.shape trả về một tuple gồm số hàng và số cột của DataFrame.
4. Sự khác nhau giữa Series và DataFrame là gì?
DataFrame: DataFrame của pandas có dạng bảng với nhiều hàng và cột, trong đó mỗi cột có thể mang kiểu dữ liệu khác nhau.
Series: Series là mảng một chiều có nhãn, có thể lưu bất kỳ kiểu dữ liệu nào, nhưng tất cả giá trị phải cùng một kiểu. Về cấu trúc, Series giống như một cột đơn của DataFrame.
Series tiêu tốn ít bộ nhớ hơn DataFrame. Do đó, một số tác vụ thao tác dữ liệu sẽ nhanh hơn trên Series.
Tuy nhiên, DataFrame có thể lưu các tập dữ liệu lớn và phức tạp, còn Series chỉ xử lý dữ liệu đồng nhất. Vì vậy, tập thao tác bạn có thể thực hiện trên DataFrame phong phú hơn đáng kể so với Series.
5. Index trong pandas là gì?
Index là tập nhãn có thể nhận diện duy nhất mỗi hàng của DataFrame. Index có thể thuộc bất kỳ kiểu dữ liệu nào (như số nguyên, chuỗi, hash, v.v.).
df.index in ra các chỉ mục hàng hiện tại của DataFrame df.
Câu hỏi phỏng vấn Pandas trung cấp
Những câu hỏi này thách thức hơn một chút, và bạn có khả năng gặp chúng hơn ở các vị trí yêu cầu kinh nghiệm sử dụng pandas trước đó.
6. Multi-indexing trong pandas là gì?
Index trong pandas dùng để nhận diện duy nhất mỗi hàng của DataFrame. Ta thường chọn cột có thể nhận diện duy nhất mỗi hàng và đặt làm index. Nhưng nếu không có một cột đơn lẻ làm được điều đó thì sao?
Ví dụ, bạn có các cột “name”, “age”, “address” và “marks” trong một DataFrame. Mỗi cột trên có thể không có giá trị duy nhất cho tất cả hàng khác nhau và không phù hợp làm index.
Tuy nhiên, hai cột “name” và “address” kết hợp lại có thể nhận diện duy nhất mỗi hàng. Vậy bạn có thể đặt cả hai cột làm index. DataFrame của bạn giờ có multi-index hay còn gọi là index phân cấp.
7. Giải thích reindexing trong pandas. Cho một ví dụ.
Reindexing dùng để đưa DataFrame phù hợp với một index mới. Thông dụng nhất là lấp đầy các khoảng trống trong dữ liệu chuỗi thời gian hoặc đảm bảo báo cáo bao gồm mọi hạng mục, kể cả những hạng mục có giá trị bằng không.
Nếu index mới chứa các nhãn không có trong DataFrame gốc, pandas sẽ chèn NaN (hoặc giá trị điền bạn chỉ định) cho các hàng đó.
Ví dụ: Giả sử bạn có dữ liệu doanh số cho quý 1 và quý 3, nhưng thiếu quý 2 và quý 4 vì doanh số bằng 0. Một biểu đồ thông thường sẽ gây hiểu nhầm. reindex() khắc phục bằng cách ép các quý thiếu xuất hiện trong DataFrame.
import pandas as pd
# Original data (Note: Q2 and Q4 are missing)
data ={'Quarter':['Q1','Q3'],'Sales':[15000,18000]}
df = pd.read_json(pd.DataFrame(data).to_json())# Simulating loaded data
df = df.set_index('Quarter')# The complete index we REQUIRE for the report
all_quarters =['Q1','Q2','Q3','Q4']# Reindex forces Q2 and Q4 to appear, filling them with 0 instead of NaN
df_full = df.reindex(all_quarters, fill_value=0)Được hỗ trợ bởi
8. Khác biệt giữa loc và iloc?
Cả .loc() và .iloc() trong pandas đều để chọn các phần con của DataFrame. Trên thực tế, chúng được dùng rộng rãi để lọc DataFrame theo điều kiện.
Ta nên dùng .loc() để chọn dữ liệu bằng nhãn thực của hàng và cột, trong khi .iloc() dùng để trích xuất dựa trên chỉ số nguyên của hàng và cột.
9. Trình bày hai cách khác nhau để tạo một DataFrame trong pandas
Từ dictionary:
import pandas as pd
data ={'Name':['John','Cataline','Matt'],'Age':[50,45,30],'City':['Austin','San Francisco','Boston'],'Marks':[70,80,95]}
df = pd.DataFrame(data)Được hỗ trợ bởi
Từ list các list:
import pandas as pd
data =[['John',25,'Austin',70],['Cataline',30,'San Francisco',80],['Matt',35,'Boston',90]]
columns =['Name','Age','City','Marks']
df = pd.DataFrame(data, columns=columns)Được hỗ trợ bởi
10. Làm sao đếm tất cả giá trị duy nhất của một cột phân loại trong DataFrame?
Hàm Series.value_counts() trả về số lần xuất hiện của mỗi giá trị duy nhất trong một series hay cột.
Ví dụ:
Chúng ta tạo một DataFrame df có cột phân loại tên Sex, và chạy hàm .value_counts() để xem số lượng mỗi giá trị duy nhất trong cột đó.
import pandas as pd
data =[['John',50,'Male','Austin',70],['Cataline',45,'Female','San Francisco',80],['Matt',30,'Male','Boston',95]]# Column labels of the DataFrame
columns =['Name','Age','Sex','City','Marks']# Create a DataFrame df
df = pd.DataFrame(data, columns=columns)
df['Sex'].value_counts()Được hỗ trợ bởi
Nếu bạn muốn xem phân phối theo phần trăm thay vì chỉ số đếm thô, hãy dùng tham số normalize=True trong .value_counts().
11. Kiểu dữ liệu category là gì và tại sao dùng?
Kiểu dữ liệu category dùng cho các cột có số lượng nhỏ giá trị chuỗi duy nhất (độ phân biệt thấp). Nó tiết kiệm rất nhiều bộ nhớ và tăng tốc thao tác như sắp xếp, nhóm vì Pandas chỉ lưu chuỗi một lần trong bảng tra cứu và dùng số nguyên nhẹ cho cột dữ liệu thực tế.
Câu hỏi phỏng vấn Pandas cho người có kinh nghiệm
Những ai đã có nền tảng vững về pandas và ứng tuyển vị trí cao hơn có thể gặp một số câu hỏi sau:
12. Tối ưu hiệu năng với tập dữ liệu lớn trong pandas như thế nào?
Dùng PyArrow: Nạp dữ liệu với engine="pyarrow" và dtype_backend="pyarrow". Cách này nhanh hơn và tiết kiệm bộ nhớ hơn nhiều so với kiểu NumPy tiêu chuẩn.
Vector hóa thay vì vòng lặp: Vòng lặp tốn kém, đặc biệt với dữ liệu lớn. Thay vào đó, sử dụng các phép vector hóa vì chúng áp dụng trên toàn bộ cột cùng lúc, nhanh hơn lặp theo hàng.
Chỉ nạp dữ liệu cần thiết: Dùng tham số usecols trong read_csv() hoặc read_parquet() để giới hạn lượng dữ liệu được nạp.
Kiểu dữ liệu tiết kiệm bộ nhớ: Các kiểu mặc định trong pandas không tiết kiệm bộ nhớ. Ví dụ, số nguyên mặc định là int64, nhưng nếu giá trị phù hợp int32, điều chỉnh sang int32 sẽ tối ưu bộ nhớ. Chuyển chuỗi có độ phân biệt thấp sang kiểu category cũng rất hữu ích.
Dùng gom nhóm dữ liệu: Hãy thử gom nhóm và thực hiện các phép thống kê vì thao tác trên dữ liệu đã tổng hợp hiệu quả hơn trên toàn bộ tập.
Xử lý song song: pandas nguyên bản là đơn luồng. Để tận dụng song song trên một máy, giải pháp ưu tiên là dùng Polars (đa luồng theo mặc định) hoặc các thư viện như Modin đóng vai trò thay thế song song tương thích cho pandas.
13. Khác biệt giữa phương thức .join() và .merge() trong pandas?
Join: Nối hai DataFrame dựa trên index. Tuy nhiên có tham số tùy chọn on để chỉ định nối theo cột. Mặc định là left join. Cú pháp: df1.join(df2).
Merge: Hàm merge() linh hoạt hơn, cho phép chỉ định các cột dùng để nối DataFrame. Mặc định là inner join, nhưng có thể tùy chỉnh sang left, right, outer, inner và cross. Cú pháp: pd.merge(df1, df2, on=”column_names”).
14. Timedelta là gì?
Timedelta biểu diễn khoảng thời gian, tức chênh lệch giữa hai ngày hoặc thời điểm, đo bằng đơn vị như ngày, giờ, phút, giây.
15. Phương thức .append() đã bị loại bỏ. Giờ kết hợp các DataFrame thế nào?
Nếu bạn cố dùng .append() trong môi trường Pandas hiện đại (phiên bản 2.0 trở lên), sẽ phát sinh lỗi vì phương thức này bị loại để khuyến khích thực hành mã hiệu quả hơn.
Thay vào đó, bạn nên gom tất cả DataFrame hoặc các hàng vào một list, rồi gọi pd.concat() một lần:
new_df = pd.concat([df1, df2], ignore_index=True)Được hỗ trợ bởi
16. Khi nào nên dùng Polars thay vì pandas?
Bạn nên cân nhắc Polars (thư viện DataFrame dựa trên Rust) khi:
Tập dữ liệu lớn hơn đáng kể so với RAM sẵn có: Polars có đánh giá lười/streaming.
Bạn cần hiệu năng đa luồng: Các thao tác của pandas phần lớn là đơn luồng.
Từng mili-giây đều quan trọng: Bạn đang xây dựng pipeline dữ liệu hiệu năng cao.
Câu hỏi phỏng vấn viết mã với Pandas
Kỹ năng thực hành cũng quan trọng như kiến thức lý thuyết khi vượt qua phỏng vấn công nghệ. Dưới đây là một số câu hỏi mã hóa về pandas bạn cần biết trước khi gặp người phỏng vấn.
17. Làm sao đọc tệp Excel và chuyển thành CSV bằng pandas?
Trước tiên, dùng hàm .read_excel() để nạp dữ liệu Excel vào một biến. Sau đó, chỉ cần áp dụng hàm .to_csv() để chuyển đổi trơn tru.
Đây là mã mẫu:
import pandas as pd
#input your excel file path into the read_excel() function.
excel_data = pd.read_excel("/content/sample_data/california_housing_test.xlsx")
excel_data.to_csv("CSV_data.csv", index =None, header=True)Được hỗ trợ bởi
Lưu ý: Trong bối cảnh phỏng vấn hiện đại, hãy đề cập rằng việc giữ nguyên kiểu dữ liệu bằng định dạng parquet (với .to_parquet() thay cho .to_csv()) thường vượt trội khi xử lý tập dữ liệu lớn.
18. Làm sao sắp xếp DataFrame theo cột?
Ta gọi phương thức .sort_values() để sắp xếp DataFrame theo một hoặc nhiều cột.
Cú pháp: df.sort_values(by=[“column_names”]), như ví dụ sau:
import pandas as pd
data =[['John',50,'Male','Austin',70],['Cataline',45,'Female','San Francisco',80],['Matt',30,'Male','Boston',95],['Oliver',35,'Male','New york',65]]# Column labels of the DataFrame
columns =['Name','Age','Sex','City','Marks']# Create a DataFrame df
df = pd.DataFrame(data, columns=columns)# Sort values based on ‘Age’ column
df.sort_values(by=['Age'])
df.head()`Được hỗ trợ bởi
19. Trình bày hai cách khác nhau để lọc dữ liệu
Hãy minh họa cách lọc DataFrame sau:
import pandas as pd
data ={'Name':['John','Cataline','Matt'],'Age':[50,45,30],'City':['Austin','San Francisco','Boston'],'Marks':[70,80,95]}# Create a DataFrame df
df = pd.DataFrame(data)Được hỗ trợ bởi
Phương pháp 1: Boolean indexing
new_df = df[(df.Name =="John")|(df.Marks >90)]print(new_df)Được hỗ trợ bởi
Phương pháp 2: Dùng phương thức .query()
df.query('Name == "John" or Marks > 90')print(new_df)Được hỗ trợ bởi
20. Làm sao tổng hợp dữ liệu (ví dụ: mean hoặc sum)?
Hàm .groupby() cho phép bạn tổng hợp dữ liệu theo các cột nhất định và thực hiện phép toán trên dữ liệu đã nhóm. Kết hợp với phương thức .agg() để tăng tính rõ ràng.
Trong đoạn mã sau, dữ liệu được nhóm theo cột Name, và tính trung bình Grades cho mỗi nhóm:
import pandas as pd
# Create a DataFrame
data ={'Name':['John','Matt','John','Matt','Matt','Matt'],'Grades':[10,20,30,15,25,18]}# Create a DataFrame df
df = pd.DataFrame(data)# mean marks of John and Mattprint(df.groupby('Name').agg(
avg_grade=('Grades','mean'),)Được hỗ trợ bởi
21. Làm sao tạo một cột mới dẫn xuất từ các cột hiện có?
Có hai cách để tạo cột mới từ các cột hiện có:
Gán trực tiếp: Gán một cột với tên mới bằng phép biến đổi từ các cột hiện có: df['Total'] = df['Math'] + df['Science']
Chuỗi phương thức (method chaining): Dùng hàm lambda với .assign(): df = df.assign(Total=lambda x: x['Math'] + x['Science'])
Phương pháp chaining hiện được ưa chuộng vì cải thiện khả năng đọc mã bằng cách loại bỏ biến trung gian. Toàn bộ biến đổi dữ liệu trong một pipeline logic duy nhất giúp giảm lỗi đáng kể, vì bạn không còn nguy cơ tham chiếu nhầm phiên bản DataFrame lỗi thời hoặc sai trong quá trình phân tích.
Câu hỏi phỏng vấn Pandas cho nhà khoa học dữ liệu
Giờ chúng ta đã bao quát các câu hỏi chung và câu hỏi mã hóa về pandas, hãy xem các câu hỏi phỏng vấn pandas cho khoa học dữ liệu.
22. Xử lý giá trị null hay thiếu trong pandas như thế nào?
Bạn có thể dùng một trong ba phương pháp sau để xử lý giá trị thiếu trong pandas:
dropna(): loại bỏ các hàng hoặc cột bị thiếu khỏi DataFrame.
fillna(): điền giá trị thiếu bằng một giá trị cụ thể.
interpolate(): điền giá trị thiếu bằng các giá trị nội suy tính toán.
Với backendPyArrow, kiểu số nguyên nay có thể lưu giá trị NA mà không cần ép sang float, giúp bảo toàn độ tin cậy dữ liệu trong quy trình khoa học.
23. Khác biệt giữa phương thức fillna() và interpolate()
fillna(): Điền bằng giá trị tĩnh (ví dụ 0 hoặc "Unknown"). Việc điền xuôi bằng tham số method='ffill' trong .fillna() đã bị phản đối; hãy dùng trực tiếp .ffill() thay thế.
interpolate(): Điền bằng ước lượng toán học (tuyến tính, đa thức, spline) giữa các điểm. Cần thiết cho chuỗi thời gian khi bạn muốn “nối các điểm”.
24. Resampling là gì?
Resampling dùng để thay đổi tần suất báo cáo của dữ liệu chuỗi thời gian. Hãy tưởng tượng bạn có dữ liệu theo tháng và muốn chuyển thành theo tuần hoặc theo năm; đó là lúc dùng resampling.
Chuyển dữ liệu theo tháng sang theo tuần hoặc theo ngày về bản chất là upsampling. Kỹ thuật nội suy được dùng để tăng tần suất ở đây.
Ngược lại, chuyển từ theo tháng sang theo năm gọi là downsampling, nơi áp dụng các kỹ thuật tổng hợp dữ liệu.
25. Làm sao thực hiện one-hot encoding bằng pandas?
Chúng ta thực hiện one-hot encoding để chuyển giá trị phân loại thành số, cho phép đưa vào thuật toán học máy.
import pandas as pd
data ={'Name':['John','Cateline','Matt','Oliver'],'ID':[1,22,23,36],'Category':['A','B','A','B']}
df = pd.DataFrame(data)#one hot encoding
new_df = pd.get_dummies(df, columns=['Category'])
new_df.head()Được hỗ trợ bởi
Trong sản xuất, dùng OneHotEncoder của Scikit-learn là lựa chọn ưu tiên vì nó giữ nguyên schema.
26. Làm sao tạo biểu đồ đường (line plot) trong pandas?
Để tạo biểu đồ đường, ta dùng hàm plot trong pandas.
import pandas as pd
data ={'units':[1,2,3,4,5],'price':[7,12,8,13,16]}# Create a DataFrame df
df = pd.DataFrame(data)
df.plot(kind='line', x='units', y='price')Được hỗ trợ bởi
Lưu ý: Bạn giờ có thể đổi backend sang Plotly để có biểu đồ tương tác: pd.options.plotting.backend = "plotly".
27. Phương thức pandas nào để lấy thống kê tóm tắt của tất cả các cột trong DataFrame?
df.describe() trả về các thống kê như mean, các giá trị percentile, min, max, v.v. cho mỗi cột trong DataFrame.
28. Rolling mean là gì?
Rolling mean còn được gọi là trung bình trượt vì ý tưởng là tính trung bình các điểm dữ liệu trong một cửa sổ xác định rồi trượt cửa sổ qua toàn bộ dữ liệu. Cách này giảm dao động và làm nổi bật xu hướng dài hạn trong dữ liệu chuỗi thời gian.
29. SettingWithCopyWarning là gì và khắc phục thế nào?
Cảnh báo này xảy ra khi pandas không chắc bạn đang sửa một view hay một bản sao. Trong pandas hiện đại (ngữ cảnh 3.0+), Copy-on-Write (CoW) là tiêu chuẩn. CoW tách bạch nghiêm ngặt view và copy, đảm bảo rằng việc sửa một phần con sẽ không âm thầm thay đổi frame gốc trừ khi được yêu cầu rõ ràng. Điều này phần lớn loại bỏ mơ hồ gây ra cảnh báo.
Để khắc phục trên các phiên bản pandas cũ, dùng .loc[] để lập chỉ mục tường minh hoặc gán lát cắt cho biến mới trước khi thay đổi để đảm bảo rõ ràng và tránh hành vi ngoài ý muốn. Đọc thêm trong bài viết này: Cách khắc phục SettingWithCopyWarning.
30. Làm sao xác thực schema của DataFrame trong môi trường sản xuất?
Tiêu chuẩn trong ngành là dùng pandera, một thư viện áp dụng các kiểm tra chất lượng dữ liệu nghiêm ngặt tại thời điểm chạy. pandera cho phép bạn định nghĩa một schema để xác thực kiểu dữ liệu của cột và áp dụng logic thống kê, như đảm bảo giá trị nằm trong một phạm vi cụ thể hoặc một cột là duy nhất.
Bạn có thể dùng các decorator của nó (ví dụ @pa.check_types) để tự động xác thực đầu vào và đầu ra của hàm, ngăn “dữ liệu bẩn” âm thầm phá vỡ các pipeline phía sau. Điều này hoạt động như kiểm thử đơn vị dành cho chính dữ liệu của bạn.
Chuẩn bị cho buổi phỏng vấn
Nhiều khả năng bạn sẽ bị hỏi ít nhất vài câu trong số những câu hỏi thường gặp, vì vậy dùng chúng để luyện phỏng vấn là ý hay. Bên cạnh pandas, một công việc thiên về dữ liệu đòi hỏi nhiều kỹ năng khác. Đây là danh sách kiểm tra để bạn thành công trong toàn bộ quy trình phỏng vấn:
Hiểu yêu cầu công việc
Ôn lại mô tả công việc và trách nhiệm, đảm bảo kỹ năng và hồ sơ của bạn phù hợp. Ngoài ra, hiểu về công ty và cách vai trò của bạn tác động đến họ cũng là một điểm cộng.
Lập trình Python
Người phỏng vấn thường kiểm tra kỹ năng Python của bạn trước khi hỏi về các thư viện (pandas). Vì vậy, hãy trang bị kỹ năng Python vững chắc.
Với vai trò phân tích, chỉ riêng ngôn ngữ Python là đủ. Nhưng nếu bạn ứng tuyển nhà khoa học dữ liệu hoặc kỹ sư ML, điều quan trọng là giải các thử thách lập trình Python.
Dự án dữ liệu
Hãy đảm bảo bạn có một số bài toán dữ liệu thực tế trong hồ sơ. Với người có kinh nghiệm, bạn có thể nói về các dự án trước đây. Nếu mới vào ngành, hãy thử hoàn thành một số dự án từ Kaggle.
Các khái niệm nâng cao
Vượt ra ngoài những điều cơ bản, các câu hỏi bổ sung sẽ phụ thuộc vào vị trí.
Với nhà phân tích, câu hỏi có thể đến từ Excel, dashboard trực quan hóa dữ liệu, thống kê và xác suất.
Ngoài ra, người phỏng vấn có thể đi sâu vào học máy và học sâu nếu bạn ứng tuyển vị trí nhà khoa học dữ liệu hoặc kỹ sư ML.
Hãy kỳ vọng câu hỏi về thiết kế hệ thống nếu bạn ứng tuyển vị trí kỹ thuật cao hoặc dày dạn kinh nghiệm. Ôn lại các câu hỏi thiết kế phổ biến và luyện thiết kế hệ thống ML end-to-end.
Kết luận
Giành được công việc trong ngành dữ liệu thường đòi hỏi kỹ năng Pandas vững. Danh sách câu hỏi phỏng vấn cả lý thuyết lẫn thực hành ở trên sẽ giúp bạn vượt qua phần pandas trong buổi phỏng vấn. Thêm vào đó, các mẹo cuối bài sẽ giúp toàn bộ buổi phỏng vấn diễn ra suôn sẻ.
Bạn có thể dùng các tài nguyên sau để chuẩn bị cho phỏng vấn pandas:
Data Manipulation with pandas: Khóa học nhập môn bao quát các kiến thức cơ bản về pandas, thao tác dữ liệu và kỹ thuật trực quan hóa với dữ liệu thực tế.
Data Preparation with pandas: Hướng dẫn cung cấp kỹ năng thực hành xử lý dữ liệu thiếu với pandas, dạy các hàm như isnull(), dropna() và fillna().
Practicing Coding Interview Questions in Python: Lý tưởng để chuẩn bị phỏng vấn lập trình, khóa học bao gồm cấu trúc dữ liệu Python, xử lý chuỗi và các mảng chủ đề quan trọng khác cho phỏng vấn khoa học dữ liệu.
Data Science Interview Preparation: Cung cấp mẹo chuẩn bị toàn diện cho nhiều hình thức phỏng vấn và bao quát kỹ năng kỹ thuật trong Python, R, SQL và hơn nữa.
Srujana là một cây bút công nghệ tự do với bằng Cử nhân Khoa học Máy tính. Việc viết về nhiều chủ đề như khoa học dữ liệu, điện toán đám mây, phát triển, lập trình, bảo mật và nhiều lĩnh vực khác đến với cô một cách tự nhiên. Cô yêu thích văn học kinh điển và khám phá những điểm đến mới.
Trong bài viết này, tôi đã tổng hợp những câu hỏi phỏng vấn Pandas thường gặp nhất kèm theo câu trả lời. Một số câu hỏi đến từ chính trải nghiệm phỏng vấn của tôi tại Target cho vị trí nhà khoa học dữ liệu. Bắt đầu nhé!
Câu hỏi phỏng vấn Pandas cơ bản
Hãy xem qua một số câu hỏi cơ bản về pandas. Những người phỏng vấn dễ tính có thể bắt đầu bằng các câu hỏi đơn giản này để giúp bạn thoải mái lúc đầu, trong khi người khác có thể hỏi để đánh giá mức độ nắm vững thư viện của bạn.
1. Pandas trong Python là gì?
pandaslà một thư viện Python mã nguồn mở với các phương thức mạnh mẽ, tích hợp sẵn để làm sạch, phân tích và thao tác dữ liệu hiệu quả. Được Wes McKinney phát triển vào năm 2008, gói mạnh mẽ này có thể dễ dàng kết hợp với nhiều mô-đun khoa học dữ liệu khác trong Python.Ban đầu được xây dựng dựa trên
NumPy,pandashiện đại (v2.0+) cũng hỗ trợ backend PyArrow. Điều này cho phép thao tác nhanh hơn đáng kể, kiểu dữ liệu chuỗi thực sự, và xử lý giá trị khuyết tốt hơn (kiểu nullable) so với kiến trúc cũ chỉ dùngNumPy.2. Làm sao truy cập nhanh 5 hàng đầu và 5 hàng cuối của DataFrame trong pandas?
Phương thức
head()trongpandasđược dùng để truy cập 5 hàng đầu của DataFrame, và phương thứctail()dùng để truy cập 5 hàng cuối.Truy cập 5 hàng đầu:
dataframe_name.head()Truy cập 5 hàng cuối:
dataframe_name.tail()3. Vì sao DataFrame.shape không có ngoặc đơn?
Trong
pandas,shapelà một thuộc tính chứ không phải phương thức. Vì vậy, bạn truy cập nó không cần ngoặc đơn.DataFrame.shapetrả về một tuple gồm số hàng và số cột của DataFrame.4. Sự khác nhau giữa Series và DataFrame là gì?
DataFrame: DataFrame của
pandascó dạng bảng với nhiều hàng và cột, trong đó mỗi cột có thể mang kiểu dữ liệu khác nhau.Series: Series là mảng một chiều có nhãn, có thể lưu bất kỳ kiểu dữ liệu nào, nhưng tất cả giá trị phải cùng một kiểu. Về cấu trúc, Series giống như một cột đơn của DataFrame.
Series tiêu tốn ít bộ nhớ hơn DataFrame. Do đó, một số tác vụ thao tác dữ liệu sẽ nhanh hơn trên Series.
Tuy nhiên, DataFrame có thể lưu các tập dữ liệu lớn và phức tạp, còn Series chỉ xử lý dữ liệu đồng nhất. Vì vậy, tập thao tác bạn có thể thực hiện trên DataFrame phong phú hơn đáng kể so với Series.
5. Index trong pandas là gì?
Index là tập nhãn có thể nhận diện duy nhất mỗi hàng của DataFrame. Index có thể thuộc bất kỳ kiểu dữ liệu nào (như số nguyên, chuỗi, hash, v.v.).
df.indexin ra các chỉ mục hàng hiện tại của DataFramedf.Câu hỏi phỏng vấn Pandas trung cấp
Những câu hỏi này thách thức hơn một chút, và bạn có khả năng gặp chúng hơn ở các vị trí yêu cầu kinh nghiệm sử dụng pandas trước đó.
6. Multi-indexing trong pandas là gì?
Index trong
pandasdùng để nhận diện duy nhất mỗi hàng của DataFrame. Ta thường chọn cột có thể nhận diện duy nhất mỗi hàng và đặt làm index. Nhưng nếu không có một cột đơn lẻ làm được điều đó thì sao?Ví dụ, bạn có các cột “name”, “age”, “address” và “marks” trong một DataFrame. Mỗi cột trên có thể không có giá trị duy nhất cho tất cả hàng khác nhau và không phù hợp làm index.
Tuy nhiên, hai cột “name” và “address” kết hợp lại có thể nhận diện duy nhất mỗi hàng. Vậy bạn có thể đặt cả hai cột làm index. DataFrame của bạn giờ có multi-index hay còn gọi là index phân cấp.
7. Giải thích reindexing trong pandas. Cho một ví dụ.
Reindexing dùng để đưa DataFrame phù hợp với một index mới. Thông dụng nhất là lấp đầy các khoảng trống trong dữ liệu chuỗi thời gian hoặc đảm bảo báo cáo bao gồm mọi hạng mục, kể cả những hạng mục có giá trị bằng không.
Nếu index mới chứa các nhãn không có trong DataFrame gốc,
pandassẽ chènNaN(hoặc giá trị điền bạn chỉ định) cho các hàng đó.Ví dụ: Giả sử bạn có dữ liệu doanh số cho quý 1 và quý 3, nhưng thiếu quý 2 và quý 4 vì doanh số bằng 0. Một biểu đồ thông thường sẽ gây hiểu nhầm.
reindex()khắc phục bằng cách ép các quý thiếu xuất hiện trong DataFrame.8. Khác biệt giữa loc và iloc?
Cả
.loc()và.iloc()trong pandas đều để chọn các phần con của DataFrame. Trên thực tế, chúng được dùng rộng rãi để lọc DataFrame theo điều kiện.Ta nên dùng
.loc()để chọn dữ liệu bằng nhãn thực của hàng và cột, trong khi.iloc()dùng để trích xuất dựa trên chỉ số nguyên của hàng và cột.9. Trình bày hai cách khác nhau để tạo một DataFrame trong pandas
Từ dictionary:
Từ list các list:
10. Làm sao đếm tất cả giá trị duy nhất của một cột phân loại trong DataFrame?
Hàm
Series.value_counts()trả về số lần xuất hiện của mỗi giá trị duy nhất trong một series hay cột.Ví dụ:
Chúng ta tạo một DataFrame df có cột phân loại tên
Sex, và chạy hàm.value_counts()để xem số lượng mỗi giá trị duy nhất trong cột đó.Nếu bạn muốn xem phân phối theo phần trăm thay vì chỉ số đếm thô, hãy dùng tham số
normalize=Truetrong.value_counts().11. Kiểu dữ liệu category là gì và tại sao dùng?
Kiểu dữ liệu
categorydùng cho các cột có số lượng nhỏ giá trị chuỗi duy nhất (độ phân biệt thấp). Nó tiết kiệm rất nhiều bộ nhớ và tăng tốc thao tác như sắp xếp, nhóm vì Pandas chỉ lưu chuỗi một lần trong bảng tra cứu và dùng số nguyên nhẹ cho cột dữ liệu thực tế.Câu hỏi phỏng vấn Pandas cho người có kinh nghiệm
Những ai đã có nền tảng vững về
pandasvà ứng tuyển vị trí cao hơn có thể gặp một số câu hỏi sau:12. Tối ưu hiệu năng với tập dữ liệu lớn trong pandas như thế nào?
Dùng PyArrow: Nạp dữ liệu với
engine="pyarrow"vàdtype_backend="pyarrow". Cách này nhanh hơn và tiết kiệm bộ nhớ hơn nhiều so với kiểuNumPytiêu chuẩn.Vector hóa thay vì vòng lặp: Vòng lặp tốn kém, đặc biệt với dữ liệu lớn. Thay vào đó, sử dụng các phép vector hóa vì chúng áp dụng trên toàn bộ cột cùng lúc, nhanh hơn lặp theo hàng.
Chỉ nạp dữ liệu cần thiết: Dùng tham số
usecolstrongread_csv()hoặcread_parquet()để giới hạn lượng dữ liệu được nạp.Kiểu dữ liệu tiết kiệm bộ nhớ: Các kiểu mặc định trong
pandaskhông tiết kiệm bộ nhớ. Ví dụ, số nguyên mặc định làint64, nhưng nếu giá trị phù hợpint32, điều chỉnh sangint32sẽ tối ưu bộ nhớ. Chuyển chuỗi có độ phân biệt thấp sang kiểucategorycũng rất hữu ích.Dùng gom nhóm dữ liệu: Hãy thử gom nhóm và thực hiện các phép thống kê vì thao tác trên dữ liệu đã tổng hợp hiệu quả hơn trên toàn bộ tập.
Xử lý song song:
pandasnguyên bản là đơn luồng. Để tận dụng song song trên một máy, giải pháp ưu tiên là dùngPolars(đa luồng theo mặc định) hoặc các thư viện nhưModinđóng vai trò thay thế song song tương thích chopandas.13. Khác biệt giữa phương thức .join() và .merge() trong pandas?
Join: Nối hai DataFrame dựa trên index. Tuy nhiên có tham số tùy chọn
onđể chỉ định nối theo cột. Mặc định là left join. Cú pháp:df1.join(df2).Merge: Hàm
merge()linh hoạt hơn, cho phép chỉ định các cột dùng để nối DataFrame. Mặc định là inner join, nhưng có thể tùy chỉnh sang left, right, outer, inner và cross. Cú pháp:pd.merge(df1, df2, on=”column_names”).14. Timedelta là gì?
Timedelta biểu diễn khoảng thời gian, tức chênh lệch giữa hai ngày hoặc thời điểm, đo bằng đơn vị như ngày, giờ, phút, giây.
15. Phương thức .append() đã bị loại bỏ. Giờ kết hợp các DataFrame thế nào?
Nếu bạn cố dùng
.append()trong môi trường Pandas hiện đại (phiên bản 2.0 trở lên), sẽ phát sinh lỗi vì phương thức này bị loại để khuyến khích thực hành mã hiệu quả hơn.Thay vào đó, bạn nên gom tất cả DataFrame hoặc các hàng vào một list, rồi gọi
pd.concat()một lần:16. Khi nào nên dùng Polars thay vì pandas?
Bạn nên cân nhắc
Polars(thư viện DataFrame dựa trên Rust) khi:Tập dữ liệu lớn hơn đáng kể so với RAM sẵn có:
Polarscó đánh giá lười/streaming.Bạn cần hiệu năng đa luồng: Các thao tác của
pandasphần lớn là đơn luồng.Từng mili-giây đều quan trọng: Bạn đang xây dựng pipeline dữ liệu hiệu năng cao.
Câu hỏi phỏng vấn viết mã với Pandas
Kỹ năng thực hành cũng quan trọng như kiến thức lý thuyết khi vượt qua phỏng vấn công nghệ. Dưới đây là một số câu hỏi mã hóa về pandas bạn cần biết trước khi gặp người phỏng vấn.
17. Làm sao đọc tệp Excel và chuyển thành CSV bằng pandas?
Trước tiên, dùng hàm
.read_excel()để nạp dữ liệu Excel vào một biến. Sau đó, chỉ cần áp dụng hàm.to_csv()để chuyển đổi trơn tru.Đây là mã mẫu:
Lưu ý: Trong bối cảnh phỏng vấn hiện đại, hãy đề cập rằng việc giữ nguyên kiểu dữ liệu bằng định dạng parquet (với
.to_parquet()thay cho.to_csv()) thường vượt trội khi xử lý tập dữ liệu lớn.18. Làm sao sắp xếp DataFrame theo cột?
Ta gọi phương thức
.sort_values()để sắp xếp DataFrame theo một hoặc nhiều cột.Cú pháp:
df.sort_values(by=[“column_names”]), như ví dụ sau:19. Trình bày hai cách khác nhau để lọc dữ liệu
Hãy minh họa cách lọc DataFrame sau:
Phương pháp 1: Boolean indexing
Phương pháp 2: Dùng phương thức
.query()20. Làm sao tổng hợp dữ liệu (ví dụ: mean hoặc sum)?
Hàm
.groupby()cho phép bạn tổng hợp dữ liệu theo các cột nhất định và thực hiện phép toán trên dữ liệu đã nhóm. Kết hợp với phương thức.agg()để tăng tính rõ ràng.Trong đoạn mã sau, dữ liệu được nhóm theo cột
Name, và tính trung bìnhGradescho mỗi nhóm:21. Làm sao tạo một cột mới dẫn xuất từ các cột hiện có?
Có hai cách để tạo cột mới từ các cột hiện có:
Gán trực tiếp: Gán một cột với tên mới bằng phép biến đổi từ các cột hiện có:
df['Total'] = df['Math'] + df['Science']Chuỗi phương thức (method chaining): Dùng hàm lambda với
.assign():df = df.assign(Total=lambda x: x['Math'] + x['Science'])Phương pháp chaining hiện được ưa chuộng vì cải thiện khả năng đọc mã bằng cách loại bỏ biến trung gian. Toàn bộ biến đổi dữ liệu trong một pipeline logic duy nhất giúp giảm lỗi đáng kể, vì bạn không còn nguy cơ tham chiếu nhầm phiên bản DataFrame lỗi thời hoặc sai trong quá trình phân tích.
Câu hỏi phỏng vấn Pandas cho nhà khoa học dữ liệu
Giờ chúng ta đã bao quát các câu hỏi chung và câu hỏi mã hóa về
pandas, hãy xem các câu hỏi phỏng vấnpandascho khoa học dữ liệu.22. Xử lý giá trị null hay thiếu trong pandas như thế nào?
Bạn có thể dùng một trong ba phương pháp sau để xử lý giá trị thiếu trong
pandas:dropna(): loại bỏ các hàng hoặc cột bị thiếu khỏi DataFrame.fillna(): điền giá trị thiếu bằng một giá trị cụ thể.interpolate(): điền giá trị thiếu bằng các giá trị nội suy tính toán.Với backend PyArrow, kiểu số nguyên nay có thể lưu giá trị
NAmà không cần ép sangfloat, giúp bảo toàn độ tin cậy dữ liệu trong quy trình khoa học.23. Khác biệt giữa phương thức fillna() và interpolate()
fillna(): Điền bằng giá trị tĩnh (ví dụ 0 hoặc "Unknown"). Việc điền xuôi bằng tham sốmethod='ffill'trong.fillna()đã bị phản đối; hãy dùng trực tiếp.ffill()thay thế.interpolate(): Điền bằng ước lượng toán học (tuyến tính, đa thức, spline) giữa các điểm. Cần thiết cho chuỗi thời gian khi bạn muốn “nối các điểm”.24. Resampling là gì?
Resampling dùng để thay đổi tần suất báo cáo của dữ liệu chuỗi thời gian. Hãy tưởng tượng bạn có dữ liệu theo tháng và muốn chuyển thành theo tuần hoặc theo năm; đó là lúc dùng resampling.
Chuyển dữ liệu theo tháng sang theo tuần hoặc theo ngày về bản chất là upsampling. Kỹ thuật nội suy được dùng để tăng tần suất ở đây.
Ngược lại, chuyển từ theo tháng sang theo năm gọi là downsampling, nơi áp dụng các kỹ thuật tổng hợp dữ liệu.
25. Làm sao thực hiện one-hot encoding bằng pandas?
Chúng ta thực hiện one-hot encoding để chuyển giá trị phân loại thành số, cho phép đưa vào thuật toán học máy.
Trong sản xuất, dùng
OneHotEncodercủaScikit-learnlà lựa chọn ưu tiên vì nó giữ nguyên schema.26. Làm sao tạo biểu đồ đường (line plot) trong pandas?
Để tạo biểu đồ đường, ta dùng hàm plot trong
pandas.Lưu ý: Bạn giờ có thể đổi backend sang
Plotlyđể có biểu đồ tương tác:pd.options.plotting.backend = "plotly".27. Phương thức pandas nào để lấy thống kê tóm tắt của tất cả các cột trong DataFrame?
df.describe()trả về các thống kê như mean, các giá trị percentile, min, max, v.v. cho mỗi cột trong DataFrame.28. Rolling mean là gì?
Rolling mean còn được gọi là trung bình trượt vì ý tưởng là tính trung bình các điểm dữ liệu trong một cửa sổ xác định rồi trượt cửa sổ qua toàn bộ dữ liệu. Cách này giảm dao động và làm nổi bật xu hướng dài hạn trong dữ liệu chuỗi thời gian.
Cú pháp:
df['column_name'].rolling(window=n).mean()29. SettingWithCopyWarning là gì và khắc phục thế nào?
Cảnh báo này xảy ra khi
pandaskhông chắc bạn đang sửa một view hay một bản sao. Trongpandashiện đại (ngữ cảnh 3.0+), Copy-on-Write (CoW) là tiêu chuẩn. CoW tách bạch nghiêm ngặt view và copy, đảm bảo rằng việc sửa một phần con sẽ không âm thầm thay đổi frame gốc trừ khi được yêu cầu rõ ràng. Điều này phần lớn loại bỏ mơ hồ gây ra cảnh báo.Để khắc phục trên các phiên bản
pandascũ, dùng.loc[]để lập chỉ mục tường minh hoặc gán lát cắt cho biến mới trước khi thay đổi để đảm bảo rõ ràng và tránh hành vi ngoài ý muốn. Đọc thêm trong bài viết này: Cách khắc phục SettingWithCopyWarning.30. Làm sao xác thực schema của DataFrame trong môi trường sản xuất?
Tiêu chuẩn trong ngành là dùng
pandera, một thư viện áp dụng các kiểm tra chất lượng dữ liệu nghiêm ngặt tại thời điểm chạy.panderacho phép bạn định nghĩa một schema để xác thực kiểu dữ liệu của cột và áp dụng logic thống kê, như đảm bảo giá trị nằm trong một phạm vi cụ thể hoặc một cột là duy nhất.Bạn có thể dùng các decorator của nó (ví dụ
@pa.check_types) để tự động xác thực đầu vào và đầu ra của hàm, ngăn “dữ liệu bẩn” âm thầm phá vỡ các pipeline phía sau. Điều này hoạt động như kiểm thử đơn vị dành cho chính dữ liệu của bạn.Chuẩn bị cho buổi phỏng vấn
Nhiều khả năng bạn sẽ bị hỏi ít nhất vài câu trong số những câu hỏi thường gặp, vì vậy dùng chúng để luyện phỏng vấn là ý hay. Bên cạnh pandas, một công việc thiên về dữ liệu đòi hỏi nhiều kỹ năng khác. Đây là danh sách kiểm tra để bạn thành công trong toàn bộ quy trình phỏng vấn:
Hiểu yêu cầu công việc
Ôn lại mô tả công việc và trách nhiệm, đảm bảo kỹ năng và hồ sơ của bạn phù hợp. Ngoài ra, hiểu về công ty và cách vai trò của bạn tác động đến họ cũng là một điểm cộng.
Lập trình Python
Người phỏng vấn thường kiểm tra kỹ năng Python của bạn trước khi hỏi về các thư viện (pandas). Vì vậy, hãy trang bị kỹ năng Python vững chắc.
Với vai trò phân tích, chỉ riêng ngôn ngữ Python là đủ. Nhưng nếu bạn ứng tuyển nhà khoa học dữ liệu hoặc kỹ sư ML, điều quan trọng là giải các thử thách lập trình Python.
Dự án dữ liệu
Hãy đảm bảo bạn có một số bài toán dữ liệu thực tế trong hồ sơ. Với người có kinh nghiệm, bạn có thể nói về các dự án trước đây. Nếu mới vào ngành, hãy thử hoàn thành một số dự án từ Kaggle.
Các khái niệm nâng cao
Vượt ra ngoài những điều cơ bản, các câu hỏi bổ sung sẽ phụ thuộc vào vị trí.
Với nhà phân tích, câu hỏi có thể đến từ Excel, dashboard trực quan hóa dữ liệu, thống kê và xác suất.
Ngoài ra, người phỏng vấn có thể đi sâu vào học máy và học sâu nếu bạn ứng tuyển vị trí nhà khoa học dữ liệu hoặc kỹ sư ML.
Hãy kỳ vọng câu hỏi về thiết kế hệ thống nếu bạn ứng tuyển vị trí kỹ thuật cao hoặc dày dạn kinh nghiệm. Ôn lại các câu hỏi thiết kế phổ biến và luyện thiết kế hệ thống ML end-to-end.
Kết luận
Giành được công việc trong ngành dữ liệu thường đòi hỏi kỹ năng Pandas vững. Danh sách câu hỏi phỏng vấn cả lý thuyết lẫn thực hành ở trên sẽ giúp bạn vượt qua phần pandas trong buổi phỏng vấn. Thêm vào đó, các mẹo cuối bài sẽ giúp toàn bộ buổi phỏng vấn diễn ra suôn sẻ.
Bạn có thể dùng các tài nguyên sau để chuẩn bị cho phỏng vấn pandas: