Python面試題大合集!數據分析師必看的60道經典題目 原創
作為一名數據分析師,Python幾乎是必備的技能。它不僅簡單易讀,還擁有強大的庫支持,無論是數據處理、可視化還是機器學習,Python都能輕松搞定。今天,就給大家帶來一份超全的Python面試題合集,涵蓋初級、中級和高級,幫你輕松應對面試,快來看看吧!
一、初級Python面試題
1. Python是什么?為什么在數據分析中這么火?
Python是一種簡單易讀的高級編程語言。它之所以在數據分析中廣泛應用,主要得益于強大的庫支持,比如Pandas、NumPy用于數據處理,Matplotlib和Seaborn用于數據可視化。有了這些工具,數據分析師可以快速開發原型,并且Python還能輕松和其他技術、數據庫集成,簡直是數據分析的“瑞士軍刀”。
2. 怎么安裝外部庫和管理環境?
安裝庫用pip就行,比如??pip install pandas numpy???。要是想管理環境,防止依賴沖突,可以用??venv???或者??conda???。比如用??venv??創建環境后,激活它就能在獨立的環境中安裝和使用庫了,不用擔心和其他項目的庫沖突。
3. Python的主要數據類型有哪些?它們有什么區別?
Python有好幾種常用的數據類型。??int???和??float???是數字類型,??str???用來表示文本,??bool???就是布爾值,只有??True???和??False???。還有??list???,它是有序的、可變的,比如??[1, 2, 3]???;??tuple???也是有序的,但它是不可變的,像??(1, 2, 3)???;??set???是無序的,里面的元素都是唯一的,例如??{1, 2, 3}???;??dict???是鍵值對的形式,比如??{"name": "Alice", "age": 30}??,通過鍵可以快速查找對應的值。
4. 列表、元組和集合有什么不同?
列表是可變的,你可以隨時修改里面的元素,而且它是有序的。元組和列表很像,但它是不可變的,一旦創建就不能修改。集合是無序的,里面的元素都是唯一的,適合用來做唯一性檢查。比如,如果你需要一個數據列表,可能會頻繁修改,那就用列表;如果數據是固定的,不會變,就用元組;要是想檢查數據中有沒有重復的元素,集合就派上用場了。
5. Pandas的Series和DataFrame是什么?
Pandas的Series就像是一個一維的帶標簽的數組,比如你可以用它來存儲一列數據。DataFrame就更強大了,它是二維的,有行和列,每一列都有標簽,就像一個表格一樣,適合用來存儲結構化的數據,比如一個包含多列數據的表格。
6. 怎么用Pandas讀取CSV文件?
這個很簡單,只需要幾行代碼就行。??import pandas as pd???,然后用??df = pd.read_csv("data.csv")??,就能把CSV文件讀取到一個DataFrame里了。你還可以根據需要設置分隔符、表頭、列名等參數,很方便。
7. type()函數有什么用?
??type()???函數可以幫你查看一個變量的數據類型。比如??type(42)???會返回??int???,??type("abc")???會返回??str??,這樣你就能清楚地知道變量是什么類型,方便后續操作。
8. if、elif和else在Python中怎么用?
這三個是用來做決策的。比如你想判斷一個數是正數、負數還是零,就可以用??if x > 0:???,然后打印“Positive”;??elif x < 0:???,打印“Negative”;最后用??else:??,打印“Zero”。這樣就能根據不同的條件執行不同的操作。
9. 怎么處理DataFrame中的缺失值?
處理缺失值有好幾種方法。你可以用??isnull()???來找出哪些地方有缺失值,然后用??dropna()???把缺失值所在的行或者列直接刪除,或者用??fillna()??把缺失值替換為某個值,比如0或者平均值,具體怎么處理要看你的數據和需求。
10. 什么是列表推導式?舉個例子。
列表推導式是一種很簡潔的創建列表的方法。比如你想生成一個包含前5個數的平方的列表,就可以用??[x**2 for x in range(5)]???,這樣就能快速生成??[0, 1, 4, 9, 16]??這樣的列表,比傳統的循環方法更簡潔。
11. 怎么在Pandas DataFrame中過濾行?
你可以用布爾索引來過濾行。比如你想篩選出DataFrame中年齡大于30的行,就可以用??df[df['age'] > 30]??,這樣就會返回符合條件的行,很方便。
?12. Python中???is???和???==???有什么區別??
??==???是用來比較兩個值是否相等的,比如??x == y???,如果??x???和??y???的值一樣,就會返回??True???。而??is???是用來比較兩個對象在內存中是否是同一個對象,比如??x is y???,只有當??x???和??y???指向同一個內存地址時才會返回??True??。
13. len()函數在Python中有什么用?
??len()???函數可以返回一個對象的元素個數。比如??len([1, 2, 3])???就會返回??3??,告訴你這個列表有3個元素,很方便用來統計數據的長度。
14. 怎么在Pandas中排序數據?
在Pandas中,你可以用??sort_values()???函數來排序數據。比如你想按照某列的值對DataFrame進行排序,就可以用??df.sort_values(by='column_name')???,這樣就能按照指定列的值進行升序排序,如果需要降序,還可以加上參數??ascending=False??。
15. Python中的字典是什么?
字典是一種鍵值對的集合,通過鍵可以快速查找對應的值。比如??{"name": "Alice", "age": 30}???,你可以用??"name"???這個鍵來獲取??"Alice"??這個值,很方便用來存儲和查找數據。
16. append()和extend()有什么區別?
??append()???方法是把一個元素添加到列表的末尾。比如??lst.append([4,5])???,就會把??[4,5]???作為一個整體添加到??lst???的末尾,結果是??[[1,2,3],[4,5]]???。而??extend()???方法是把多個元素添加到列表的末尾,比如??lst.extend([4,5])???,就會把??4???和??5???分別添加到??lst???的末尾,結果是??[1,2,3,4,5]??。
17. 怎么在Pandas中把一列轉換為日期時間格式?
你可以用??pd.to_datetime()???函數來轉換。比如??df['date'] = pd.to_datetime(df['date'])???,這樣就能把??date??列轉換為日期時間格式,方便后續進行日期相關的操作。
?18. Python中的???in??運算符有什么用??
??in???運算符可以用來檢查一個字符是否在一個值中。比如??"a" in "data"???,就會返回??True???,因為它檢查到??"a"???是??"data"??中的一個字符,很方便用來判斷字符串中是否包含某個字符。
?19. ???break???、???continue???和???pass???有什么區別??
在Python中,??break???是用來退出循環的,比如在一個??for???循環中,一旦遇到??break???,循環就會直接結束。??continue???是用來跳過當前循環的這一次迭代,直接進入下一次迭代。而??pass??是一個占位符,它什么也不做,通常用在需要語法上有一個語句,但又不需要執行任何操作的時候。
20. Python中的縮進有什么作用?
Python用縮進來定義代碼塊。和其他語言用大括號??{}???來區分代碼塊不同,Python靠縮進來表示代碼的層次結構。如果你的縮進不正確,程序就會報??IndentationError??錯誤,所以一定要注意縮進的正確性。
二、中級Python面試題
?21. Pandas中的???loc???和???iloc???有什么區別??
??loc???是基于標簽的,你可以用它來通過行名或者列名來訪問數據。比如??df.loc['row_name', 'column_name']???。而??iloc???是基于整數位置的,它通過行號和列號來訪問數據,比如??df.iloc[0, 1]??,表示訪問第1行第2列的數據。
22. 淺拷貝和深拷貝有什么區別?
淺拷貝創建了一個新的對象,但它里面的元素只是原來對象元素的引用。比如你有一個列表??lst = [[1, 2], [3, 4]]???,用淺拷貝??new_lst = lst.copy()???,??new_lst???和??lst???指向同一個列表,但里面的子列表還是原來的子列表。而深拷貝會創建一個完全獨立的副本,包括所有嵌套的元素。比如用??copy.deepcopy(lst)??,就會創建一個全新的列表,里面的子列表也是全新的,不會和原來的列表共享元素。
?23. Pandas中的???groupby()??有什么作用??
??groupby()???函數可以把數據按照某個標準分成不同的組,然后對每個組應用一個函數,比如求平均值、求和等。比如你有一個包含銷售數據的DataFrame,你可以用??df.groupby('category').mean()??,按照產品類別分組,然后計算每個類別的平均銷售額,很方便用來做數據的聚合和轉換操作。
?24. Pandas中的???merge()???、???join()???和???concat()???有什么區別??
??merge()???函數是用來合并兩個DataFrame的,它類似于SQL中的連接操作,可以根據鍵值進行內連接、外連接等操作。比如??df1.merge(df2, on='key')???,就是根據??key???列把??df1???和??df2???合并起來。??join()???函數也是用來合并的,但它主要是根據索引或者鍵列來進行合并,比如??df1.join(df2, on='key')???。而??concat()???函數就更簡單了,它只是簡單地把多個DataFrame沿著某個軸拼接起來,比如??pd.concat([df1, df2], axis=0)???,就是把??df1???和??df2??沿著行拼接起來。
25. NumPy中的廣播機制是什么?
廣播機制允許不同形狀的數組進行算術運算。比如你有一個形狀為??(3, 1)???的數組和一個形狀為??(1, 3)???的數組,NumPy會自動把它們擴展為??(3, 3)??的形狀,然后進行逐元素的運算,這樣就不用手動復制數組,節省了內存,也提高了計算效率。
26. Python是怎么管理內存的?
Python主要通過引用計數和垃圾回收器來管理內存。每個對象都有一個引用計數,當一個對象的引用計數變為0時,垃圾回收器就會回收這個對象占用的內存,這樣就能自動釋放不再使用的內存,避免內存泄漏。
27. 怎么處理DataFrame中的重復值?
你可以用??df.duplicated()???來找出重復的行,然后用??df.drop_duplicates()???來刪除重復的行。如果你只想在某些列上檢查重復值,還可以指定??subset???參數,比如??df.drop_duplicates(subset=['column1', 'column2'])??,這樣就只會根據這兩列來判斷重復。
28. 怎么對DataFrame的一列應用自定義函數?
你可以用??apply()???方法來對DataFrame的一列應用自定義函數。比如你想把一列的每個值都乘以2,就可以用??df['col'] = df['col'].apply(lambda x: x * 2)??,這樣就能快速對整列數據進行操作。
?29. Pandas中的???apply()???、???map()???和???applymap()???有什么區別??
??apply()???方法是用來對DataFrame的行或者列進行操作的。比如??df.apply(lambda x: x.sum(), axis=1)???,就是對每一行求和。??map()???方法是針對Series的,它可以對Series中的每個元素進行操作,比如??df['col'].map(lambda x: x * 2)???。而??applymap()???方法是針對整個DataFrame的,它可以對DataFrame中的每個元素進行操作,比如??df.applymap(lambda x: x * 2)??。
30. NumPy和Pandas中的向量化是什么?
向量化是一種操作方式,它允許你在整個數組或者DataFrame上直接進行運算,而不需要寫循環。比如你想把一個數組的所有元素都加1,直接用??array + 1??就行,而不需要用循環一個個加。這樣不僅代碼更簡潔,而且運行速度也更快,因為向量化操作是用底層的優化過的代碼實現的。
31. 怎么在Pandas中對時間序列數據進行重采樣?
你可以用??resample()???函數來對時間序列數據進行重采樣。比如你有一個按天記錄的數據,你想把它轉換為按月平均值,就可以用??df.resample('M').mean()??,這樣就能把數據按照月份進行分組,然后計算每個月的平均值。
?32. Pandas中的???any()???和???all()???有什么區別??
??any()???函數是用來檢查是否至少有一個元素為??True???的。比如??df['col'].any()???,如果??col???列中至少有一個非零值或者非空值,就會返回??True???。而??all()???函數是用來檢查是否所有元素都為??True???的,只有當??col???列中的所有值都不為零或者不為空時,才會返回??True??。
33. 怎么改變DataFrame中一列的數據類型?
你可以用??astype()???函數來改變數據類型。比如你想把一列的數據類型從字符串轉換為浮點數,就可以用??df['col'] = df['col'].astype('float')??,這樣就能快速轉換數據類型,方便后續的計算。
34. Pandas支持哪些文件格式?
Pandas支持的文件格式可多了,包括CSV、Excel、JSON、HTML、SQL、HDF5、Feather和Parquet等。你可以用Pandas很方便地讀取和寫入這些文件格式,比如??pd.read_csv()???、??pd.read_excel()???、??df.to_json()??等,這樣就能輕松處理各種數據源。
35. lambda函數是什么?怎么用?
lambda函數是一種匿名函數,它可以用一行代碼定義一個簡單的函數。比如??square = lambda x: x ** 2???,這就定義了一個計算平方的函數,你可以直接用??square(3)??來計算3的平方,很方便用來定義一些簡單的操作。
?36. ???zip()???和???enumerate()???函數有什么用??
??zip()???函數可以把兩個可迭代對象的元素一一對應地組合起來。比如??zip([1, 2, 3], ['a', 'b', 'c'])???,就會得到一個包含??(1, 'a')???、??(2, 'b')???、??(3, 'c')???的迭代器。而??enumerate()???函數可以把一個可迭代對象的元素和它的索引組合起來,比如??enumerate(['a', 'b', 'c'])???,就會得到一個包含??(0, 'a')???、??(1, 'b')???、??(2, 'c')??的迭代器,這兩個函數在循環中很有用。
37. Python中的異常是什么?怎么處理?
異常就是程序運行時出現的錯誤。比如你嘗試除以零、訪問不存在的文件或者引用未定義的變量,都會引發異常。你可以用??try-except??塊來捕獲異常,比如:
try:
result = 10 / 0
except ZeroDivisionError:
print("Cannot divide by zero")這樣就能在出現除零錯誤時打印一條友好的提示信息,而不是讓程序直接崩潰。你還可以用??finally???塊來清理資源,比如關閉文件,即使發生異常也會執行。另外,你還可以用??raise??來拋出自定義的異常,方便調試和錯誤處理。
?38. Python中的???*args???和???**kwargs???是什么??
??*args???和??**kwargs???是用來傳遞可變數量的參數的。??*args???可以傳遞任意數量的位置參數,比如??def func(*args)???,你可以用??func(1, 2, 3)???來調用它,??args???會是一個包含??1???、??2???、??3???的元組。而??**kwargs???可以傳遞任意數量的關鍵字參數,比如??def func(**kwargs)???,你可以用??func(a=1, b=2)???來調用它,??kwargs???會是一個包含??{'a': 1, 'b': 2}??的字典,這樣就能讓函數更靈活地接受不同數量和類型的參數。
39. 怎么處理Pandas中一列的混合數據類型?
在Pandas中,一列最好只有一種數據類型,比如全是整數或者全是字符串。但有時候數據可能會很亂,比如有些行是數字,有些行是字符串,或者還有空值。這種情況下,Pandas會把這一列的數據類型設置為??object??,這可能會導致性能下降,還可能會讓一些類型相關的操作出錯,比如計算平均值或者字符串操作。
要解決這個問題,你可以用??df['column'].astype()???來把整列轉換為期望的數據類型,比如??df['column'].astype('float')???。如果有些值不能轉換為浮點數,你可以用??pd.to_numeric(df['column'], errors='coerce')???,它會把能轉換的值轉換為數字,不能轉換的值會變成??NaN???,這樣你就可以進一步清理數據,比如用??fillna()???填充空值,或者用??dropna()??刪除空值,讓數據更干凈、更規范。
?40. Pandas中的???value_counts()???和???groupby().count()???有什么區別??
??value_counts()???是用來統計Series中每個唯一值的出現次數的。比如??df['Gender'].value_counts()???,就會返回一個Series,告訴你??Gender???列中??Male???和??Female??各有多少個,很方便用來分析單列數據的分布情況。
而??groupby().count()???是用來對DataFrame進行分組統計的。比如??df.groupby('Department').count()???,它會按照??Department??列的值分組,然后統計每個組中每列的非空值個數,返回一個DataFrame,這樣你就能看到每個部門中各個字段的數據量,適合用來分析多列數據在不同分組下的情況。
41. Python中的裝飾器是什么?舉個例子
裝飾器是一種很強大的功能,它可以讓一個函數在不修改原有代碼的情況下,增加新的功能。比如你想給一個函數添加日志功能,就可以定義一個裝飾器:
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__}")
return func(*args, **kwargs)
return wrapper
@log_decorator
def say_hello():
print("Hello!")這樣,當你調用??say_hello()??的時候,它不僅會打印“Hello!”,還會打印一條日志信息“Calling say_hello”,很方便用來做日志記錄、性能監控或者權限控制等功能。
42. Python中的生成器是什么?和普通函數有什么區別?
生成器是一種特殊的函數,它用??yield???關鍵字來返回值,而不是用??return???。生成器返回的是一個迭代器,它會在每次調用??next()??的時候生成一個值,而不是一次性生成所有值。比如:
def my_generator():
yield 1
yield 2
yield 3你可以用??for num in my_generator():???來遍歷生成器,它會依次生成??1???、??2???、??3??。和普通函數相比,生成器最大的好處是節省內存,因為它不需要一次性把所有值都存儲在內存中,特別適合處理大數據或者無限序列。
43. 怎么分析和優化Python代碼的性能?
分析代碼性能可以用一些工具,比如??cProfile???可以對整個代碼進行性能分析,??timeit???可以測量代碼片段的運行時間,??line_profiler??可以逐行分析代碼的性能瓶頸。優化代碼的方法有很多,比如減少代碼的復雜度,盡量用向量化操作代替循環,緩存計算結果避免重復計算等,這些方法都能讓代碼運行得更快。
44. Python中的上下文管理器是什么?有什么用?
上下文管理器是一種很方便的語法,它可以用??with??語句來管理資源。比如打開文件的時候,你可以用:
with open('file.txt') as f:
data = f.read()這樣,文件會在??with??塊結束的時候自動關閉,即使中間發生異常也會正常關閉,不用擔心文件泄漏。上下文管理器還可以用來管理數據庫連接、鎖等資源,確保資源在使用后能正確釋放。
?45. 怎么處理缺失數據?什么時候用???dropna()???和???fillna()?????
處理缺失數據主要有兩種方法。??dropna()???是直接刪除包含缺失值的行或者列,這種方法適合缺失數據比較少,而且缺失數據對整體分析影響不大的情況。比如你有一個很大的數據集,只有少數幾行有缺失值,而且這些缺失值不會影響整體的趨勢,就可以用??dropna()??直接刪除。
??fillna()??是用某個值來填充缺失值,這種方法適合缺失數據比較多,或者缺失數據對整體分析很重要,不能簡單刪除的情況。比如你可以用平均值、中位數或者某個特定的值來填充缺失值,也可以用插值方法根據周圍的值來估算缺失值,這樣就能保留更多的數據,讓分析更準確。
46. Python的內存管理模型是什么?
Python的內存管理主要靠引用計數和循環垃圾回收器。每個對象都有一個引用計數,當一個對象的引用計數變為0的時候,垃圾回收器就會回收這個對象占用的內存。另外,Python還有一個循環垃圾回收器,它可以檢測并回收那些相互引用導致引用計數無法歸零的對象,這樣就能有效地管理內存,避免內存泄漏。
47. Python中的多線程和多進程有什么區別?
多線程適合處理I/O密集型任務,比如文件讀寫、網絡請求等。它可以在一個程序中同時運行多個線程,看起來像是同時在做很多事情,但實際上由于Python的全局解釋器鎖(GIL),同一時間只有一個線程可以執行Python代碼,所以多線程在CPU密集型任務上效率不高。
多進程就不同了,它可以在多個CPU核心上同時運行多個進程,每個進程都有自己獨立的內存空間,適合處理CPU密集型任務,比如計算密集型的算法。因為每個進程可以獨立運行,所以它不受GIL的限制,能充分利用多核CPU的優勢。
48. 怎么用NumPy廣播機制提高性能?
NumPy的廣播機制可以讓不同形狀的數組進行運算,而不需要復制數據。比如你有一個形狀為??(3, 1)???的數組和一個形狀為??(1, 3)???的數組,NumPy會自動把它們擴展為??(3, 3)??的形狀,然后進行逐元素的運算。這樣不僅節省了內存,因為不需要復制數組,還提高了計算效率,因為廣播機制是用底層的優化過的代碼實現的。
49. 寫高效Pandas代碼的最佳實踐有哪些?
寫高效Pandas代碼有很多技巧。比如盡量用向量化操作代替循環,因為向量化操作是用底層的優化過的代碼實現的,比循環快得多。還有,盡量避免使用??.apply()???方法,因為它本質上還是循環,可以用向量化操作或者內置函數來替代。另外,要盡量減少鏈式索引,因為鏈式索引可能會導致數據復制,增加內存使用量。如果數據中有重復的字符串,可以用??categorical??類型來代替,這樣可以節省內存,提高性能。
50. 怎么處理不適合放在內存中的大數據集?
如果數據太大,不能一次性放進內存,你可以用一些方法來處理。比如用??pd.read_csv()???的??chunksize??參數,可以分塊讀取CSV文件,每次只處理一小塊數據。還可以用Dask庫,它是一個并行計算庫,可以自動把大數據集分成小塊,然后并行處理,最后再把結果合并起來。另外,你也可以用迭代的方式,每次只加載數據的一個子集,這樣就能處理比內存大得多的數據集。
51. 怎么處理不平衡的數據集?
不平衡的數據集是指某個類別的數據量遠遠大于其他類別的數據量。處理這種數據集有幾種方法。一種是過采樣,比如SMOTE算法,它可以通過插值等方式增加少數類別的數據量,讓數據集更平衡。另一種是欠采樣,就是從多數類別中隨機抽取一部分數據,減少多數類別的數據量。還可以用一些支持類別權重的算法,比如在訓練模型的時候,給少數類別更高的權重,這樣模型就會更關注少數類別,提高分類效果。
?52. Pandas中的???.loc[]???、???.iloc[]???和???.ix[]???有什么區別??
??.loc[]???是基于標簽的索引,你可以用它來通過行名或者列名來訪問數據。比如??df.loc['row_name', 'column_name']???。??.iloc[]???是基于整數位置的索引,它通過行號和列號來訪問數據,比如??df.iloc[0, 1]???。而??.ix[]??已經被廢棄了,不推薦使用,因為它容易讓人混淆,而且在某些情況下可能會出現意外的結果。
53. Python數據分析中的常見性能陷阱有哪些?
在Python數據分析中,有一些常見的性能陷阱。比如,很多人會用循環來處理數據,但實際上循環很慢,應該盡量用向量化操作來替代。還有,有時候會不小心復制了很大的DataFrame,比如用??df = df.copy()???,這樣會占用更多的內存,其實很多時候不需要復制整個DataFrame。另外,要注意數據類型的內存占用,比如用??float64???類型存儲的數據比用??float32??類型占用的內存多,如果數據精度要求不高,可以用更小的數據類型來節省內存。
54. 怎么在Python中序列化和反序列化對象?
序列化就是把對象轉換為可以存儲或者傳輸的格式,反序列化就是把序列化的數據還原為對象。在Python中,可以用??pickle??模塊來序列化和反序列化Python對象。比如:
import pickle
pickle.dump(obj, open('file.pkl', 'wb'))
obj = pickle.load(open('file.pkl', 'rb'))這樣就可以把對象??obj???保存到文件中,也可以從文件中加載回來。如果需要和其他語言交互,可以用??json??模塊,它可以把對象轉換為JSON格式,方便和其他語言共享數據。
55. 怎么在Python中處理分類變量?
處理分類變量有幾種方法。可以用??LabelEncoder???,它會把分類變量轉換為整數標簽,比如??Male???和??Female???會被轉換為??0???和??1???。還可以用??OneHotEncoder???,它會把分類變量轉換為獨熱編碼,比如一個有三個類別的變量會被轉換為三個二進制列。另外,Pandas的??pd.get_dummies()??也可以用來做獨熱編碼,很方便用來處理分類變量,讓它們更適合機器學習算法。
?56. Pandas中???Series.map()???和???Series.replace()???有什么區別??
??Series.map()???是用來對Series中的每個元素應用一個映射或者函數的。比如你有一個Series,你想把里面的值??A???映射為??1???,??B???映射為??2???,就可以用??Series.map({'A': 1, 'B': 2})???。而??Series.replace()???是用來替換Series中的值的,比如你想把??A???替換為??1???,??B???替換為??2???,就可以用??Series.replace({'A': 1, 'B': 2})???。雖然它們看起來很像,但??map()???更靈活,可以應用函數,而??replace()??更適合直接替換值。
57. 怎么用Python設計一個ETL管道?
ETL管道就是數據抽取(Extract)、轉換(Transform)和加載(Load)的過程。抽取階段,你可以用Pandas、??requests???或者??sqlalchemy???等工具從API、CSV文件或者數據庫中獲取數據。轉換階段,你可以用Pandas和NumPy來清洗數據,比如處理空值、解析日期、合并數據集、衍生新列等。加載階段,你可以把處理好的數據寫入數據庫,比如用??to_sql()??,或者導出為CSV、Parquet等文件格式。
為了自動化和監控ETL管道,可以用Airflow這樣的工具來調度任務,也可以用簡單的腳本加上日志和異常處理來確保管道的健壯性和可擴展性。
58. 怎么在Python中實現日志記錄?
在Python中,可以用??logging??模塊來記錄日志。比如:
import logging
logging.basicConfig(level=logging.INFO)
logging.info("Script started")這樣就可以記錄日志信息了。你可以設置日志的級別,比如??INFO???、??WARNING???、??ERROR??等,還可以設置日志的格式和輸出位置,比如把日志輸出到文件中,方便后續查看和分析。
59. NumPy數組和Pandas DataFrame的區別是什么?
NumPy數組和Pandas DataFrame各有優缺點。NumPy數組更適合處理純數值數據,它的性能很高,運算速度很快,而且有很多高效的數學函數。但NumPy數組沒有標簽,操作起來不太直觀。
Pandas DataFrame更適合處理結構化的表格數據,它有行名和列名,操作起來很方便,比如可以用列名直接訪問數據,還可以很方便地進行數據清洗、篩選、分組等操作。但Pandas DataFrame的性能比NumPy數組稍差一些,因為它多了很多額外的功能和數據結構。
60. 怎么在Python中創建自定義異常類?
創建自定義異常類很簡單,只需要繼承??Exception??類就行。比如:
class CustomError(Exception):
pass這樣就創建了一個自定義異常類??CustomError???,你可以在代碼中用??raise CustomError("Something went wrong")??來拋出這個異常,這樣就能讓錯誤信息更具體,方便調試和處理。
結語
掌握Python對于任何數據分析師來說都是必備的技能。Python不僅可以用來處理數據、可視化,還能用來做統計建模和自動化任務。面試的時候,面試官不僅會考察你的代碼能力,還會看你能不能把Python的概念應用到實際的數據問題中。
這60道題目可以幫助你打下堅實的Python基礎,讓你在面試中更有信心。在練習這些題目的時候,不要只關注代碼的正確性,還要學會清楚地解釋你的思路。很多雇主更看重你的清晰表達、問題解決策略以及溝通能力,而不僅僅是技術準確性。所以,一定要練習清楚、自信地回答問題,祝你在面試中一切順利!
如果你覺得這篇文章對你有幫助,別忘了點贊和分享哦!也歡迎留言交流更多Python和數據分析的經驗和技巧,一起進步!
本文轉載自??Halo咯咯?? 作者:基咯咯

















