Python常見面試題(二)——numpy和pandas

一、NumPy和Pandas間的區別與練習

  • 功能定位

NumPy主要用于數值計算,提供了多維數組對象ndarray,支持數組操作線性代數隨機數生成等功能。
?Pandas則建立在NumPy之上,提供了更高級的數據結構,主要用于數據分析,尤其是處理表格化數據。

  • 數據結構

NumPy的核心是多維數組對象ndarray,它可以表示任意維度的數組。
Pandas提供了兩種主要的數據結構:Series(一維標記數組)和DataFrame(二維帶標簽的數據表)。

  • 索引方式

NumPy的數組只能使用整數索引訪問元素。
Pandas的Series和DataFrame可以使用標簽索引(如列名或行名)來訪問數據,也可以通過整數位置索引訪問。

  • 擅長領域

NumPy特別擅長處理矩陣運算、數值計算等任務。
Pandas適合處理結構化的數據,如數據清洗、數據選擇、數據轉換等操作。

  • 對缺失數據的處理

NumPy的數組不支持缺失數據,通常會用特殊值(如NaN)表示。

Pandas中的Series和DataFrame提供了更便捷的方法來處理缺失數據,如填充缺失值、刪除缺失值等。

  • 其他區別

NumPy 比 Pandas 更快且內存效率更高。

NumPy 主要用于數值計算,而 Pandas 用于更廣泛的用途,例如數據分析和可視化。

NumPy 支持使用矩陣和數組數據格式,其中 Pandas 可以與表數據、Excel 文件、CSV 文件等一起使用。

NumPy 使用數組作為其主要對象,并且默認情況下也不索引。Pandas 使用系列和數據框作為其主要對象,并默認提供索引。

聯系:

DataFrame 的列是 Series 對象,可以通過列索引對列進行訪問和操作。

二、numpy

【介紹】

NumPy 是 Python 中的科學計算包/庫。它提供了一個多維的數組對象以及多個派生對象,例如屏蔽數組和矩陣。NumPy 包的核心是ndarray 。它負責封裝同質數據類型的 n 維數組,提供優化的代碼編譯,使其性能非常好。它從根本上用于執行數學和邏輯運算、實現基本線性代數、操作數組形狀、排序和選擇、I/O、執行離散傅立葉變換等。

【使用numpy的原因及其優勢】

快:雖然 Python 列表也是數組,但這些列表的處理時間比 NumPy 數組慢 50 倍,使其成為執行數值和科學計算的最流行的庫。(列表存儲在隨機內存位置,需要更長的時間來訪問和處理;NumPy 數組作為 ndarray 存儲在一個連續的內存位置,使得操作和計算非常高效和優化)

便利:在 NumPy 中,數組對象稱為ndarray,它提供了許多附加功能,使其更快、更易于使用。

1、列表與numpy的區別

  • Python 列表可以動態增長,而 NumPy 數組在創建時的大小是固定的。因此,當我們更改ndarray的大小時,它會刪除原始數組并創建一個新數組。
  • 在計算高級數學和包含大量數據的各種其他類型的運算時,NumPy 的性能要高得多。使用 Python 進行計算需要更多代碼,而且效率不如 NumPy。
  • NumPy 數組的所有元素的數據類型都相同,因此與 Python 數組不同,它占用固定的內存大小。然而,有一個例外,即可以擁有對象數組(Python 以及 Numpy),允許數組使用不同大小的元素。
  • 許多科學界使用基于 Python 的軟件包進行高級計算,其中都包含 NumPy 數組。基于 Python 的序列通常會在預處理數據時轉換為 NumPy 數組,并將結果輸出為 NumPy 數組。因此,編寫高效的基于 Python 的科學計算需要 NumPy 數組的知識。

2、narray的重要屬性

  • ndarray.shape?– 它輸出數組維度。對于包含n 行m 列的矩陣,形狀將為(n, m)。要獲取給定 array 的軸數請使用 ndarray.ndim 。
  • ndarray.dtype?– 它描述數組中包含的元素的數據類型。我們還可以使用標準 Python 指定數據類型。NumPy 還提供了自己的附加數據類型。其中一些示例是numpy.int16、numpy.int32numpy.float64
  • ndarray.itemsize?– 它輸出給定數組的每個元素的大小(以字節為單位)。它與使用ndarray.dtype.itemsize相同。舉例來說,我們有一個包含float64類型元素的數組。它的項目大小將為8 ,這是64/8的結果。另一種情況是當包含的數據類型是complex32時。它的項目大小將為4,即32/8
  • ndarray.data?– 它返回保存數組的內存位置或緩沖區。它不經常使用,因為我們使用索引作為對該內存位置的引用來獲取數組中包含的元素。

3、NumPy 中的通用函數

exp、sin、cos、add、sqrt等數學函數在 Numpy 中稱為通用函數ufunc?

4、解釋 NumPy 中的術語“廣播”

每當我們有不同維度的數組時,NumPy 都會以統一的方式處理它們,同時執行算術、函數、按位以及邏輯運算。這稱為廣播。它用于解釋逐個元素隱式完成的操作行為。

5、如何將一維數組轉換為二維數組?

使用NumPy 提供的np.newaxisnp.expand_dims函數。

6、解釋NumPy 中復制視圖之間的主要區別

當我們在numpy中使用copy() 函數時,它會創建一個全新的數組。我們在原始數組中所做的更改不會反映在其復制版本中。另一方面,view()函數只是原始數組的反射。無論我們在原始數組中進行什么更改,也都將在使用視圖函數調用的數組中實現。

7、用numpy創建DataFrame

#數組創建
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#用np創建dataframe
frame4 = pd.DataFrame(np.arange(9).reshape(3, 3),index=['a', 'c', 'd'],columns=['Ohio', 'Texas', 'California'])

三、pandas

3.1、pandas中的series

【定義】一種類似于一維數組的對象,它由一組數據(各種Numpy數據類型)以及一組與之相關的數據標簽(即索引)組成。

1、series的建立【列表、字典】、讀取、改變(值和索引)、計算、找索引是否在、檢查缺失值、命名、對其并執行運算

#建立
obj = pd.Series([4, 7, -5, 3])
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
#查詢
obj.values
obj.index
obj4.name
obj4.index.name
#運算
import numpy as np
np.exp(obj2)
#####in是看索引
'b' in obj2#false
#看空
pd.isnull(obj3)
obj4.isnull()#類方法

2、索引

Pandas 中的 Series 的索引(index)實際上是一個包含每個元素標簽的對象,這個對象的數據類型是 pd.Index。在索引為數字 0 1 2 3 的 Series 中,這些標簽是整數,而在以字母 a b c d 為索引的 Series 中,這些標簽是字符串。從數據處理角度來看,這兩種類型的索引都能夠進行各種類型的計算和處理。 但是在實際應用中,這兩種類型的索引可能存在差異,例如在使用 loc 或 iloc 進行索引時,整數索引可能會造成歧義,因為整數索引和行號索引的用法相同而且重合。在這種情況下,最好使用明確的字符串標簽作為 Series 的索引。

3.2、pandas中的DataFrame

DataFrame就像SPSS的數據文件、R的數據框,SAS的dataset

1、dataframe的建立——利用字典

#建立
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002, 2003], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}frame = pd.DataFrame(data)
frame.head()
#通過指定列名順序,可以改變變量順序
pd.DataFrame(data, columns = ['year', 'state', 'pop'])   
#指定行列標簽
frame2 = pd.DataFrame(data, columns = ['year', 'state', 'pop', 'debt'], index = ['one', 'two', 'three', 'four', 'five', 'six'])
pop = {'Nevada': {2001: 2.4, 2002: 2.9, 2003:3.2},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)#2001是行索引 

2、DataFrame的索引

包含行索引和列索引

#行列索引——先取列再取行
#-1就是最后一行
frame3['Nevada'][:2]#讀取列——左行右列
frame2.iloc[1:3,]
#loc是靠label定位或者布爾值,iloc是按照整數的順序定位
frame2.iloc[1:3,0:2]bool_arr=frame2['pop']>2
result =frame2.loc[bool_arr,]

也可以用切片

3、其他

命名:

#命名和單元格值
frame3.index.name = 'year'; frame3.columns.name = 'state'
frame3.values#這樣輸出的是會是數組

?刪除

del frame2['year']

自動識別缺失

series合進DataFrame
把series賦給DataFrame,會按DataFrame的index來合并,不夠的地方用缺失數據來表示:

frame2['debt'] = val

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15937.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15937.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15937.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自動駕駛場景中的長尾問題怎么解決?

自動駕駛長尾問題是指自動駕駛汽車中的邊緣情況,即發生概率較低的可能場景。感知的長尾問題是當前限制單車智能自動駕駛車輛運行設計域的主要原因之一。自動駕駛的底層架構和大部分技術問題已經被解決,剩下的5%的長尾問題,逐漸成了制約自動駕…

huggingface 筆記:查看GPU占用情況

0 準備部分 0.1 創建虛擬數據 import numpy as npfrom datasets import Datasetseq_len, dataset_size 512, 512 dummy_data {"input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)),"labels": np.random.randint(0, 1, (dataset_size…

學習和分享關于 Vue.js 的路由(vue-router)

學習和分享關于 Vue.js 的路由(vue-router)是一個非常有價值的主題,因為路由是構建單頁應用程序(SPA)的核心部分。本文將介紹 Vue.js 路由的基本概念和實現,并展示一個典型的項目目錄結構。 目錄 Vue.js 路…

【代碼隨想錄訓練營】【Day 29】【回溯-3】| Leetcode 39, 41, 131

【代碼隨想錄訓練營】【Day 29】【回溯-3】| Leetcode 39, 41, 131 需強化知識點 startInex作用:一是處理是否可以有重復值,二是實現縱向遍歷(不能沒有)去重要在數組有序的前提下進行分割問題 題目 39.…

工業控制2D組態界面,丑是丑了點,但非常實用。

工業控制的2D組態界面是用于監控和控制工業過程的界面。它通常具有以下特征: 實時數據顯示:2D組態界面能夠實時顯示傳感器和設備的數據,如溫度、壓力、流量等。這些數據以圖表、儀表盤、數字顯示等形式呈現,使操作人員能夠實時了解…

Android:使用Kotlin搭建MVVM架構模式

一、簡介Android MVVM架構模式 MVVM全稱:Model、View、ViewModel; Model:負責數據的請求、解析、過濾等數據層操作,其中Repository: 提供數據的 API(從本地或者網絡)。View:負責視圖部分展示Vie…

Spring (18)什么是JdbcTemplate

JdbcTemplate 是 Spring 框架提供的一個主要的類,旨在簡化傳統 JDBC 的使用。它處理了諸如連接管理、異常處理等繁瑣的低級任務,讓開發者可以更專注于執行 SQL 語句和處理結果。JdbcTemplate 屬于 Spring JDBC 模塊(spring-jdbc)&…

每日力扣刷題day05(小白簡單題)

文章目錄 2024.5.26(5題)1446.連續字符題解一題解二 2824.統計和小于目標的下標對數目題解一題解二 1768.交替合并字符串題解一題解二題解三 796.旋轉字符串題解一題解二 1304.和為零的 N 個不同整數題解一題解二 2024.5.26(5題) …

快速冪求逆元與逆元

我上一篇博客鏈接寫的是多個數求乘法逆元而快速冪求逆元用于單個數求乘法逆元 逆元是對分數取模用的 對于除法取模不成立,即(a/b)%p≠(a%p/b%p)%p。求逆元的思路:(一般ACM的題目都是對1e97這種素數取模,所以gcd(a,p)1)a*b1(mod p) > b1/a…

[Algorithm][動態規劃][簡單多狀態DP問題][按摩師][打家劫舍Ⅱ][刪除并獲得點數][粉刷房子]詳細講解

目錄 1.按摩師1.題目鏈接2.算法思路詳解3.代碼實現 2.打家劫舍 II1.題目鏈接2.算法思路詳解3.代碼實現 3.刪除并獲得點數1.題目鏈接2.算法思路詳解3.代碼實現 4.粉刷房子1.題目鏈接2.算法思路詳解3.代碼實現 1.按摩師 1.題目鏈接 按摩師 2.算法思路詳解 思路: 確…

大模型提示詞Prompt學習

引言 關于chatGPT的Prompt Engineer,大家肯定耳朵都聽起繭了。但是它的來由?,怎么能用好?很多人可能并不覺得并不是一個問題,或者說認定是一個很快會過時的概念。但其實也不能說得非常清楚(因為覺得沒必要深…

Redis第18講——Redis和Redission實現延遲消息

即使不是做電商業務的同學,也一定知道訂單超時關閉這種業務場景,這個場景大致就是用戶下單后,如果在一定時間內未支付(比如15分鐘、半小時),那么系統就會把這筆訂單給關閉掉。這個功能實現的方式有很多種&a…

unity開發Hololens 制作滑動框

一定要做到最后一步,才會有效果 1、創建空物體 ,并添加組件 創建空物體 命名ScrollingObjectCollection, 添加組件如下圖 下面是各個組件展開的內容 2、在ScrollingObjectCollection 下面創建兩個空物體,分別命名Container、Clipping…

運籌說 第115期 | 排隊論經典例題講解

通過前幾期的學習,我們已經學會了排隊論的基本概念、生滅過程和Poisson過程,等待制排隊模型、混合制排隊模型、其他排隊模型以及排隊系統優的定義與相關求解方法。在實際工作中,我們能發現排隊論在經濟管理中有著許多應用,本期小編…

大數據量上傳FTP

背景 筆者有一個需求是把將近一億條數據上傳到FTP服務器中,這些數據目前是存儲在mysql中,是通過關聯幾張表查詢出來的,查詢出來的數據結果集一共是6個字段。要求傳輸的時候拆分成一個個小文件,每個文件大小不能超過500M。我的測試…

FuTalk設計周刊-Vol.052

#AI漫談 熱點捕手 1.ChatGPT 大更新!GPT-4 開始又變聰明了 OpenAI 官方宣布,新版 GPT-4 Turbo 今天開始向所有付費 ChatGPT 用戶開放。 鏈接https://www.pconline.com.cn/focus/1733/17330089.html 2.刷爆多模態任務榜單!賈佳亞團隊Mini-G…

Linux下環境變量配置出錯導致基礎命令使用不了的問題解決

問題: 當配置環境變量: echo export PATH/home/ubuntu/.local/lib/python3.8/site-packages :$PATH >> ~/.bashrc 執行生效命令 source ~/.bashrc 出現所有的基礎操作命令:ls vim都使用不了 解決方式: 1&#xff09…

21.2zabbix低級自動發現-mysql多實例

配置mysql多實例 注釋:自動發現:創建監控主機;低級自動發現:創建監控項 mysql單實例是直接yum安裝,開啟mysql多實例 準備配置文件 #mysql3307實例 cp /etc/my.cnf /etc/my3307.cnf vim /etc/my3307.cnf [mysqld] dat…

lazarus-IDE 可以開發 Node.js 嗎?

Lazarus IDE 本身不是用來開發 Node.js 應用程序的工具,因為它是一個用于開發跨平臺應用程序的環境,類似于 C Builder 或 Delphi。Node.js 是一個基于 JavaScript 的運行時環境,通常使用 V8 引擎,用于構建異步、事件驅動的服務器端…

產品經理-流程圖結構圖(四)

1. 流程圖 1.1 概念 為了達到特定的目標而進行的一系列有邏輯性的操作步驟,由兩個及以上的步驟,完成一個完整的行為的過程,可稱之為流程 1.2 產品經理為什么需要繪制流程圖? 保證產品的使用邏輯合理順暢向項目組其他成員清晰的…