python处理一亿条数据_Python基础数据处理库
生活随笔
收集整理的這篇文章主要介紹了
python处理一亿条数据_Python基础数据处理库
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Numpy 簡介
import?numpy?as?np
Numpy是應用Python進行科學計算的基礎庫。它的功能包括多維數(shù)組、基本線性代數(shù)、基本統(tǒng)計計算、隨機模擬等。Numpy的核心功能是ndarray 類,即多維數(shù)組。多維數(shù)組是線性代數(shù)中非常廣泛的概念,如一維數(shù)組就是向量,二維數(shù)組是矩陣。在數(shù)組中,要求所有元素必須是同一類型,這是與列表與字典的區(qū)別之一一。針對數(shù)組,通過Numpy可以實現(xiàn)的基本操作包括數(shù)組的創(chuàng)建、數(shù)組切片、數(shù)組重組、數(shù)組運算等。01
數(shù)組的創(chuàng)建
常見的創(chuàng)建數(shù)組的方法之一:轉換Python的列表、元組等數(shù)據(jù)結構為數(shù)組類型。下面實例給出了創(chuàng)建數(shù)組的常用命令。>>> import?numpy?as?np??#?載入Numpy庫簡寫為"np">>> arr1?=?np.array([1,2,3,4,5,6])>>> arr1array([1,?2,?3,?4,?5,?6])>>> type(arr1) # 查看數(shù)據(jù)類型numpy.ndarray>>> arr1.shape # 各個維度的數(shù)組長度(6,)>>> arr2?=?np.array([[1,2,3],[4,5,6]])>>>?arr2?array([[1, 2, 3], [4, 5, 6]])>>> arr2.shape(2,?3)另外,還可以利用Numpy的內(nèi)置函數(shù)來直接創(chuàng)建數(shù)組。>>> arr3?=?np.arange(0,1,0.1)>>> arr3array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])# 創(chuàng)建一維長度為2,二維長度為3的元素全為0的數(shù)組>>>?arr4?=?np.zeros((2,3))?>>>?arr4?array([[ 0., 0., 0.], [ 0., 0., 0.]])# 創(chuàng)建一維長度為2,二維長度為3的元素全為1的二維數(shù)組>>> arr5?=?np.ones((2,3))?>>>?arr5array([[?1.,??1.,??1.], [ 1., 1., 1.]])# 創(chuàng)建一維長度為2,二維長度為3的二維空數(shù)組>>> arr6 = np.empty([2,3]) >>> arr6array([[ 1., 1., 1.], [ 1., 1., 1.]]) # 從[0,1]區(qū)間的均勻分布隨機抽取四個數(shù)>>> arr7 = np.random.rand(4)>>> arr7array([ 0.36570416, 0.83097711, 0.98761922, 0.87057992])# 生成一個標準正態(tài)分布的4*4樣本值>>> arr8 = np.random.normal(size=(4,4)) >>>?arr8array([[-0.15990639, 0.7088309 , -0.20267733, 2.14992874], [ 0.05542048, -1.15103197, 0.21129526, 0.6212253 ], [-1.31547565, 1.4401065 , 0.6680733 , -0.60608497],???????[-1.03471769,??0.55338916,?-0.05869825,??0.61610795]])注意這里的?np.arange()?可以指定步長為(0,1)為小數(shù),而Python內(nèi)置函數(shù)range無此功能。另外,np.random?中包括多種概率分布的隨機樣本,是數(shù)據(jù)分析輔助的重點工具之一。02
數(shù)組的切片與索引
數(shù)組的截取與 list 相同,可以通過 []?來指定每個維度的索引。>>> import numpy as np>>> a = np.array([[1,2,3,4,5],[6,7,8,9,10]])>>> print(a)[[ 1 2 3 4 5] [ 6 7 8 9 10]]>>>?print(a[0:1])??#?截取第一行[[1 2 3 4 5]]>>>?print(a[1,2:5])?#?截取第二行,第三、四、五列[ 8 9 10]>>>?print(a[1:])?#?截取第二行[[?6??7??8??9?10]]另外,在應用中經(jīng)常需要返回滿足給定條件的數(shù)組元素。為此,下面介紹一個按照條件索引的數(shù)組操作。>>> b = a[a>6] # 截取矩陣中大于6的元素,范圍是一維數(shù)組>>> print(b)[ 7 8 9 10]03
數(shù)組重組
數(shù)組重組主要是指對原來數(shù)組進行修改,具體包括數(shù)組類型修改、數(shù)組維度修改與數(shù)組元素修改。>>>?#?數(shù)組元素的數(shù)據(jù)類型為字符串>>>?num_str1?=?np.array(['1.2','2.4','3.6'],dtype=np.string_)>>> # 利用astype轉換為浮點型>>>?num_str1.astype(float)array([ 1.2, 2.4, 3.6])>>> data = np.arange(6)>>> # 利用reshape 指定新數(shù)組各個維度>>> data = data.reshape(2,3) >>> dataarray([[0, 1, 2], [3, 4, 5]])>>> # data中小于3的元素用0代替,否則用1代替>>> np.where(data < 3,0,1) array([[0, 0, 0],???????[1,?1,?1]])這里?np.where(condition,x,y)函數(shù)是三元表達式:滿足條件(condition),輸出 x ,不滿足輸出 y 。04
?數(shù)組運算
數(shù)學中的加減乘除運算同樣也使用于數(shù)組。在數(shù)組中是按照元素級進行批量運算的,下面挑選幾個實例來說明這一點:>>> arr7 = np.array([[1,2,3],[4,5,6]])>>> arr7array([[1, 2, 3], [4, 5, 6]])>>>?arr7?*?2????#?數(shù)組的每個每個元素都乘以2array([[ 2, 4, 6], [ 8, 10, 12]])>>> arr7*arr7 # 兩個數(shù)組對應的元素進行運算array([[ 1, 4, 9], [16, 25, 36]])>>> np.log(arr7) # 數(shù)組的每個元素都取 logarray([[ 0. , 0.69314718, 1.09861229], [ 1.38629436, 1.60943791, 1.79175947]])除了上述簡單的元素級運算,數(shù)組也可以進行各種矩陣運算,如矩陣向量的混合運算、矩陣求逆、矩陣行列式、矩陣特征值。>>> A = np.array([[0,1],[2,3]])>>> Aarray([[0, 1], [2, 3]])>>> v = np.array([1,2])>>> varray([1,?2])>>>?v.dot(A)??#?dot是內(nèi)積運算,運算規(guī)則與線性代數(shù)相同array([4, 7])>>> A.dot(v) # 這里v看作列變量array([2,?8])Numpy 庫為Python中的數(shù)組運算提供了很多便捷,這里只列舉了常用的少數(shù)幾個操作命令。其實,Numpy可以看作計算科學的基礎模塊,而接下來介紹的pandas庫是在Numpy基礎上的拓展,也具備Numpy中的許多功能,而且不要求數(shù)據(jù)類型必須單一。pandas 簡介
import pandas as pd
Pamdas是建立在 Numpy庫之上的,是使得數(shù)據(jù)分析工作變得更簡單更快的高級操作工具。pandas的進行數(shù)據(jù)處理主要針對兩種數(shù)據(jù)結構:Series 和 DataFrame 。Series
Series 是建立在 pandas 庫之上的,是使得數(shù)據(jù)分析工作變得更簡單更快的高級操作工具。引入索引的一大作用是數(shù)據(jù)對其功能,使得進行數(shù)據(jù)處理后不會發(fā)生數(shù)據(jù)錯行。最簡單的 Series 可以由一個列表類型的數(shù)據(jù)生成:>>> import pandas as pd>>> ser1 = pd.Series([1,3,5,7])>>> ser10 11 32 53 7dtype: int64Series的數(shù)據(jù)變現(xiàn)形式:索引在左側,值在右邊,默認的索引是從0開始的整數(shù)型序列。我們也可以在創(chuàng)建的時候通過 index 參數(shù)指定索引數(shù)據(jù)。>>> ser2 = pd.Series([1,3,5,7], index=['a','b','c','d'])>>> ser2a 1b 3c 5d 7dtype: int64在創(chuàng)建 Series 后可以對它們的一些屬性進行修改,如下所示:>>> ser2.indexIndex(['a', 'b', 'c', 'd'], dtype='object')>>> ser2.index = ['A','B','C','D']>>> ser2A 1B 3C 5D 7dtype: int64對 Series 中特定數(shù)據(jù)的查找,可以通過以下幾種方式來實現(xiàn):>>> ser2['A'] # 通過索引值查找值1>>> ser2[1] # 通過行號查找值3>>> ser2[0:2] # 通過切片來查找子序列A 1B 3dtype: int64在 Series 類型運算中,輸出結果會自動對齊不同索引的數(shù)據(jù)。當序列中沒有共同的索引時,則輸出缺失值符號 NaN :>>> ser3 = pd.Series([1,3,5],index=['a','b','c'])>>> ser4 = pd.Series([2,4,6],index=['c','d','b'])>>> ser3 + ser4a NaNb 9.0c 7.0d NaNdtype: float64上述這種運算機制在數(shù)據(jù)處理中非常有用,按照索引來進行運算可以避免錯誤分行。總結:Series 基本操作類似數(shù)組和字典,它們之間可以相互轉換。但是,序列是順序指定的、具有索引的數(shù)據(jù)類型。數(shù)組是沒有索引的,而字典的元素是無序的。Dataframe
DataFrame是將若干個 Series 按列合并而成的二維數(shù)據(jù)結構,每一列單獨取出來就是一個 Series 。數(shù)據(jù)框?DataFrame是用于存儲多行和多列的數(shù)據(jù)集合,是機器學習算法讀取數(shù)據(jù)的最常用格式。就像日常見到的二維 Excel 表格一樣,第一行默認表示變量名,后續(xù)每行為一個樣本,而每列表示變量(特征)的取值。利用數(shù)據(jù)框之前需要導入處理數(shù)據(jù)的核心庫 pandas 。下列幾行代碼基本包括了 DataFrame 的創(chuàng)建。>>> import pandas as pd # 導入 Python 庫 pandas>>> dic1 = {"age":[18,20,22],"name":["xiaoming","wanghan","hanwei"],"Chinese":[90,78,97],"Math":[87,69,89],"English":[98,78,83],"History":[86,79,80],"Physics":[99,78,94]}>>> df = pd.DataFrame(dic1,index=['a','b','c'])>>> print(df) age name Chinese Math English History Physicsa 18 xiaoming 90 87 98 86 99b 20 wanghan 78 69 78 79 78c???22????hanwei???????97????89???????83???????80???????94從上面實例可以看出,數(shù)據(jù)框是由字典 data 直接轉化而來。實際數(shù)據(jù)分析中,采集到的數(shù)據(jù)結構往往是多種類型的,而數(shù)據(jù)框恰好可以存放不同類型的數(shù)據(jù)。另外,利用 Python 讀取的數(shù)據(jù)往往自動轉化為數(shù)據(jù)框類型的,如前面介紹的讀取本地數(shù)據(jù)命令 pd.read_csv()?。01
?了解數(shù)據(jù)全貌
一旦把數(shù)據(jù)載入到 Python 中,首先要做的是了解數(shù)據(jù)的全貌與基本特征。例如,要知道數(shù)據(jù)框大小(行和列)、列變量名、索引號、數(shù)據(jù)類型等。如果想知道數(shù)據(jù)框的列變量與索引名稱,可以使用如下命令>>> print(df.columns) # 列變量名稱Index(['age', 'name', 'Chinese', 'Math', 'English', 'History', 'Physics'], dtype='object')>>> print(df.index) # 索引序列Index(['a', 'b', 'c'], dtype='object')>>> print(df.shape) # 行數(shù)與列數(shù)(3, 7)另外,Python 中存在一些內(nèi)置函數(shù)可以輸出許多數(shù)據(jù)框屬性,例如:>>>?df.info()???#?整體匯總<class 'pandas.core.frame.DataFrame'>Index: 3 entries, a to cData columns (total 7 columns):age 3 non-null int64name 3 non-null objectChinese 3 non-null int64Math 3 non-null int64English 3 non-null int64History 3 non-null int64Physics 3 non-null int64dtypes: int64(6), object(1)memory usage: 168.0+ bytes>>>?df.describe()??#?對每一列數(shù)值型數(shù)據(jù)進行統(tǒng)計,包括計數(shù)、均值、標準差、標準差、各個分位數(shù)等 age Chinese ... History Physicscount 3.0 3.000000 ... 3.000000 3.000000mean 20.0 88.333333 ... 81.666667 90.333333std 2.0 9.609024 ... 3.785939 10.969655min 18.0 78.000000 ... 79.000000 78.00000025% 19.0 84.000000 ... 79.500000 86.00000050% 20.0 90.000000 ... 80.000000 94.00000075% 21.0 93.500000 ... 83.000000 96.500000max 22.0 97.000000 ... 86.000000 99.000000[8 rows x 6 columns]>>> df.describe(include=["object"]) # 基本統(tǒng)計描述(指定變量為類別型) namecount 3unique 3top wanghanfreq 102
?訪問數(shù)據(jù)
訪問數(shù)據(jù)框一列與若干列的常用的方法有如下兩種:>>> df["name"] # 按列變量訪問a xiaomingb wanghanc hanweiName: name, dtype: object>>>?df.iloc[:,3]??#?按照列數(shù)訪問,這里表示第二列對應的所有行a 87b 69c 89Name: Math, dtype: int64>>> df[["name","age","Math"]] # 指定列變量名 name age Matha xiaoming 18 87b wanghan 20 69c hanwei 22 89>>> df.iloc[:,:3] # 按照列數(shù)訪問,這里表示前兩列對應所有行 age name Chinesea 18 xiaoming 90b 20 wanghan 78c 22 hanwei 97>>> df.head() # 默認輸出前五行 age name Chinese Math English History Physicsa 18 xiaoming 90 87 98 86 99b 20 wanghan 78 69 78 79 78c 22 hanwei 97 89 83 80 94>>> df.tail() # 默認輸出后五行 age name Chinese Math English History Physicsa 18 xiaoming 90 87 98 86 99b 20 wanghan 78 69 78 79 78c 22 hanwei 97 89 83 80 94類似的,訪問數(shù)據(jù)框的行有如下幾種方法:>>> df[1:2] # 取第二行 age name Chinese Math English History Physicsb 20 wanghan 78 69 78 79 78>>> df.iloc[1,:] # 按照行數(shù)訪問,這里表示第二行對應的所有列age 20name wanghanChinese 78Math 69English 78History 79Physics 78Name: b, dtype: object>>> df.iloc[0:2,] # 前兩行的所有列 age name Chinese Math English History Physicsa 18 xiaoming 90 87 98 86 99b 20 wanghan 78 69 78 79 78>>> df.iloc[1,1] # 第二行第二列'wanghan'03
?數(shù)字特征統(tǒng)計
既然數(shù)據(jù)框是個數(shù)據(jù)集合,那么我們經(jīng)常需要對其進行一些基本統(tǒng)計描述。下面幾行代碼給出了常用的統(tǒng)計描述的操作:>>> print(df.mean()) # 默認對數(shù)值型的所有列分布求平均age 20.000000Chinese 88.333333Math 81.666667English 86.333333History 81.666667Physics 90.333333dtype: float64>>> df.sum() # 列求和,方式類似 meanage 60name xiaomingwanghanhanweiChinese 265Math 245English 259History 245Physics 271dtype: object>>> df.max() # 求最大值,求最小值用 df.min()age 22name xiaomingChinese 97Math 89English 98History 86Physics 99dtype: object>>> df.isnull() # 布爾值輸出,檢查每列是否有缺失值 age name Chinese Math English History Physicsa False False False False False False Falseb False False False False False False Falsec False False False False False False False>>> df['age'].unique() # 該列不同值的個數(shù)array([18, 20, 22], dtype=int64)>>> df['age'].value_counts() # 統(tǒng)計某一列 'age' 中各個值出現(xiàn)的次數(shù)18 122 120 1Name:?age,?dtype:?int64總結
以上是生活随笔為你收集整理的python处理一亿条数据_Python基础数据处理库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 检查用户名是否存在的servlet代码怎
- 下一篇: 软件需求分析文档模板_小议管理软件需求分