前言
數(shù)據(jù)分析是Python的重要應(yīng)用領(lǐng)域之一:Python在數(shù)據(jù)分析領(lǐng)域有著廣泛的應(yīng)用,許多數(shù)據(jù)科學(xué)家和分析師使用Python作為主要的數(shù)據(jù)分析工具。學(xué)好數(shù)據(jù)分析可以讓你更好地應(yīng)用Python來解決實(shí)際問題,并提升在數(shù)據(jù)分析領(lǐng)域的競爭力。
在當(dāng)今信息爆炸的時(shí)代,數(shù)據(jù)分析能力成為了一種重要的技能。無論是在工作中還是個(gè)人生活中,我們都需要從大量的數(shù)據(jù)中提取有用的信息和洞察,并做出相應(yīng)的決策。學(xué)好數(shù)據(jù)分析可以幫助你更好地理解和利用數(shù)據(jù),提高決策的準(zhǔn)確性和效率。
數(shù)據(jù)分析可以幫助我們從數(shù)據(jù)中發(fā)現(xiàn)規(guī)律、趨勢和模式,從而做出更加明智的決策和創(chuàng)新。學(xué)好數(shù)據(jù)分析可以讓你更好地理解數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)中的價(jià)值,并將其應(yīng)用于實(shí)際的業(yè)務(wù)和創(chuàng)新中。
而且數(shù)據(jù)分析是許多其他領(lǐng)域的基礎(chǔ),如機(jī)器學(xué)習(xí)、人工智能、金融分析、市場營銷等。學(xué)好數(shù)據(jù)分析可以為你進(jìn)一步學(xué)習(xí)和應(yīng)用這些領(lǐng)域提供堅(jiān)實(shí)的基礎(chǔ)。
學(xué)習(xí)數(shù)據(jù)分析可以培養(yǎng)你的邏輯思維、問題解決能力和創(chuàng)新思維。數(shù)據(jù)分析需要你從數(shù)據(jù)中提取有用的信息、進(jìn)行推理和推斷,并做出相應(yīng)的結(jié)論。這種思維方式在許多其他領(lǐng)域也是非常有價(jià)值的。
總之,學(xué)好數(shù)據(jù)分析可以讓你更好地應(yīng)用Python解決實(shí)際問題,提高決策的準(zhǔn)確性和效率,并為你進(jìn)一步學(xué)習(xí)和應(yīng)用其他領(lǐng)域提供堅(jiān)實(shí)的基礎(chǔ)。
接下來我們就詳細(xì)介紹:NumPy,Pandas的種種

一丶NumPy篇
1.NumPy基本類型
在數(shù)據(jù)分析中,NumPy(Numerical Python)是一個(gè)重要的Python庫,它提供了高性能的多維數(shù)組對象和用于處理這些數(shù)組的函數(shù)。以下是NumPy中的一些基本數(shù)據(jù)類型:
數(shù)值類型(Numeric Types):
- int:整數(shù)類型,如int8、int16、int32、int64等。
- uint:無符號整數(shù)類型,如uint8、uint16、uint32、uint64等。
- float:浮點(diǎn)數(shù)類型,如float16、float32、float64等。
- complex:復(fù)數(shù)類型,如complex64、complex128等。
布爾類型(Boolean Type):
- bool:布爾類型,只有兩個(gè)值True和False。
字符串類型(String Type):
- string:字符串類型,用于存儲文本數(shù)據(jù)。
時(shí)間類型(Datetime Type):
- datetime64:日期和時(shí)間類型,用于存儲日期和時(shí)間數(shù)據(jù)。
對象類型(Object Type):
- object:對象類型,可以存儲任意Python對象。
這些數(shù)據(jù)類型可以用于創(chuàng)建NumPy數(shù)組,通過指定dtype參數(shù)來指定數(shù)組的數(shù)據(jù)類型。例如,可以使用np.array函數(shù)創(chuàng)建一個(gè)整數(shù)類型的數(shù)組:
import numpy as np
arr = np.array([1, 2, 3, 4], dtype=np.int32)
print(arr.dtype) # 輸出 int32
在數(shù)據(jù)分析中,根據(jù)具體的需求和數(shù)據(jù)類型的特點(diǎn),選擇合適的數(shù)據(jù)類型可以提高計(jì)算效率和節(jié)省內(nèi)存空間。NumPy還提供了豐富的函數(shù)和方法來處理這些不同類型的數(shù)據(jù),例如數(shù)值計(jì)算、數(shù)組操作、統(tǒng)計(jì)分析等。
2.NumPy基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
NumPy(Numerical Python)是Python中用于科學(xué)計(jì)算和數(shù)據(jù)分析的重要庫。它提供了高性能的多維數(shù)組對象(ndarray)和用于處理這些數(shù)組的函數(shù)。以下是NumPy中的一些基礎(chǔ)數(shù)據(jù)結(jié)構(gòu):
ndarray(N-dimensional Array):
ndarray是NumPy中最重要的數(shù)據(jù)結(jié)構(gòu),它是一個(gè)多維數(shù)組對象。ndarray可以是一維、二維或更高維的數(shù)組,可以存儲相同類型的元素。ndarray提供了快速的數(shù)值計(jì)算和向量化操作,是進(jìn)行數(shù)據(jù)分析的基礎(chǔ)。
Scalar(標(biāo)量):
標(biāo)量是NumPy中的基本數(shù)據(jù)類型,表示單個(gè)的數(shù)值。標(biāo)量可以是整數(shù)、浮點(diǎn)數(shù)、布爾值等。
Vector(向量):
向量是一維的ndarray數(shù)組,表示一列數(shù)值。向量可以通過一維數(shù)組創(chuàng)建,例如np.array([1, 2, 3])。
Matrix(矩陣):
矩陣是二維的ndarray數(shù)組,表示一個(gè)二維表格的數(shù)值。矩陣可以通過二維數(shù)組創(chuàng)建,例如np.array([[1, 2], [3, 4]])。
Tensor(張量):
張量是NumPy中的高維數(shù)組,可以是三維、四維或更高維的數(shù)組。張量在深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)中經(jīng)常使用。
多維數(shù)組:
np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]):創(chuàng)建一個(gè)三維數(shù)組,包含兩個(gè)二維數(shù)組。
數(shù)組屬性:
- shape:數(shù)組的維度信息,返回一個(gè)元組,例如(2, 3)表示2行3列的數(shù)組。
- dtype:數(shù)組元素的數(shù)據(jù)類型。
數(shù)組操作:
- indexing和slicing:通過索引和切片操作獲取和修改數(shù)組元素。
- reshape:改變數(shù)組的形狀。
- transpose:交換數(shù)組的維度。
數(shù)學(xué)運(yùn)算:
- 加法、減法、乘法、除法等數(shù)學(xué)運(yùn)算。
- 常用函數(shù):例如
np.sum()、np.mean()、np.max()等用于對數(shù)組進(jìn)行統(tǒng)計(jì)計(jì)算。
除了基本的數(shù)據(jù)結(jié)構(gòu),NumPy還提供了很多高級功能,如廣播(broadcasting)、向量化操作等,可以大大提高數(shù)據(jù)分析的效率。
使用NumPy進(jìn)行數(shù)據(jù)分析時(shí),通常還會結(jié)合其他庫,如Pandas、Matplotlib等,以實(shí)現(xiàn)更強(qiáng)大的數(shù)據(jù)分析和可視化功能。
3.NumPy通用函數(shù)
NumPy(Numerical Python)是Python中用于科學(xué)計(jì)算和數(shù)據(jù)分析的重要庫。它提供了許多通用函數(shù)(Universal Functions,簡稱ufuncs),用于對NumPy數(shù)組進(jìn)行元素級別的操作和計(jì)算。以下是一些常用的NumPy通用函數(shù)及其功能:
數(shù)學(xué)函數(shù):
-
np.abs(arr):計(jì)算數(shù)組元素的絕對值。 -
np.sqrt(arr):計(jì)算數(shù)組元素的平方根。 -
np.exp(arr):計(jì)算數(shù)組元素的指數(shù)。 -
np.log(arr):計(jì)算數(shù)組元素的自然對數(shù)。 -
np.sin(arr)、np.cos(arr)、np.tan(arr):計(jì)算數(shù)組元素的正弦、余弦和正切值。 -
np.arcsin(arr)、np.arccos(arr)、np.arctan(arr):計(jì)算數(shù)組元素的反正弦、反余弦和反正切值。
統(tǒng)計(jì)函數(shù):
-
np.mean(arr):計(jì)算數(shù)組元素的平均值。 -
np.median(arr):計(jì)算數(shù)組元素的中位數(shù)。 -
np.std(arr):計(jì)算數(shù)組元素的標(biāo)準(zhǔn)差。 -
np.var(arr):計(jì)算數(shù)組元素的方差。 -
np.min(arr)、np.max(arr):計(jì)算數(shù)組元素的最小值和最大值。 -
np.sum(arr):計(jì)算數(shù)組元素的總和。
邏輯函數(shù):
-
np.logical_and(arr1, arr2):對兩個(gè)數(shù)組進(jìn)行邏輯與操作。 -
np.logical_or(arr1, arr2):對兩個(gè)數(shù)組進(jìn)行邏輯或操作。 -
np.logical_not(arr):對數(shù)組進(jìn)行邏輯非操作。
形狀操作函數(shù):
-
np.reshape(arr, new_shape):改變數(shù)組的形狀。 -
np.transpose(arr):交換數(shù)組的維度。 -
np.flatten(arr):將多維數(shù)組轉(zhuǎn)換為一維數(shù)組。
其他函數(shù):
-
np.concatenate((arr1, arr2), axis):沿指定軸連接兩個(gè)或多個(gè)數(shù)組。 -
np.sort(arr):對數(shù)組進(jìn)行排序。 -
np.unique(arr):返回?cái)?shù)組中的唯一值。
這些通用函數(shù)可以對NumPy數(shù)組進(jìn)行各種元素級別的操作和計(jì)算,提供了豐富的功能來處理和分析數(shù)據(jù)。通過熟練掌握這些函數(shù),可以高效地進(jìn)行數(shù)據(jù)分析和科學(xué)計(jì)算。
4.NumPy索引及切片
在NumPy中,索引和切片是對數(shù)組進(jìn)行訪問和操作的重要方式。以下是對NumPy數(shù)組進(jìn)行索引和切片的詳細(xì)分析:
索引:
- 一維數(shù)組索引:可以使用整數(shù)索引訪問一維數(shù)組中的元素。例如,arr[0]表示訪問一維數(shù)組arr中的第一個(gè)元素。
- 多維數(shù)組索引:可以使用逗號分隔的整數(shù)索引訪問多維數(shù)組中的元素。例如,arr[0, 1]表示訪問多維數(shù)組arr中的第一行第二列的元素。
切片:
- 一維數(shù)組切片:可以使用冒號(:)進(jìn)行切片操作。例如,arr[1:4]表示從一維數(shù)組arr的索引1開始到索引4之前的元素(不包括索引4)。
- 多維數(shù)組切片:可以使用逗號分隔的冒號(:)進(jìn)行切片操作。例如,arr[:, 1:4]表示從多維數(shù)組arr的所有行中,從索引1開始到索引4之前的列(不包括索引4)。
布爾索引:
可以使用布爾數(shù)組作為索引來選擇滿足特定條件的元素。例如,arr[arr > 5]表示選擇數(shù)組arr中大于5的元素。
花式索引:
可以使用整數(shù)數(shù)組作為索引來選擇指定位置的元素。例如,arr[[0, 2, 4]]表示選擇數(shù)組arr中索引為0、2和4的元素。
需要注意的是,索引和切片操作返回的是原始數(shù)組的視圖(view),而不是副本(copy)。這意味著對視圖的修改會影響原始數(shù)組。如果需要?jiǎng)?chuàng)建副本,可以使用arr.copy()方法。
5.NumPy隨機(jī)數(shù)
在數(shù)據(jù)分析中,NumPy的random模塊提供了生成隨機(jī)數(shù)的函數(shù),用于模擬隨機(jī)實(shí)驗(yàn)、生成隨機(jī)樣本和進(jìn)行隨機(jī)抽樣等操作。以下是NumPy中常用的隨機(jī)數(shù)函數(shù)的詳細(xì)分析:
生成隨機(jī)數(shù):
-
np.random.rand(shape):生成指定形狀的[0, 1)之間的均勻分布隨機(jī)數(shù)。 -
np.random.randn(shape):生成指定形狀的標(biāo)準(zhǔn)正態(tài)分布(均值為0,標(biāo)準(zhǔn)差為1)的隨機(jī)數(shù)。 -
np.random.randint(low, high, size):生成指定范圍內(nèi)的整數(shù)隨機(jī)數(shù)。 -
np.random.random_sample(shape):生成指定形狀的[0, 1)之間的均勻分布隨機(jī)數(shù)。 -
np.random.random(shape):生成指定形狀的[0, 1)之間的均勻分布隨機(jī)數(shù)。 -
np.random.uniform(low, high, size):生成指定范圍內(nèi)的均勻分布隨機(jī)數(shù)。 -
np.random.normal(loc, scale, size):生成指定均值和標(biāo)準(zhǔn)差的正態(tài)分布隨機(jī)數(shù)。 -
np.random.standard_normal(size):生成標(biāo)準(zhǔn)正態(tài)分布(均值為0,標(biāo)準(zhǔn)差為1)的隨機(jī)數(shù)。
隨機(jī)抽樣:
-
np.random.choice(a, size, replace, p):從給定的一維數(shù)組a中進(jìn)行隨機(jī)抽樣。 -
np.random.shuffle(arr):對數(shù)組進(jìn)行原地隨機(jī)重排。 -
np.random.permutation(arr):返回一個(gè)隨機(jī)重排的數(shù)組副本。
隨機(jī)種子:
-
np.random.seed(seed):設(shè)置隨機(jī)數(shù)生成器的種子,用于生成可重復(fù)的隨機(jī)數(shù)序列。
這些隨機(jī)數(shù)函數(shù)可以用于生成各種類型的隨機(jī)數(shù),滿足不同的需求。通過靈活使用這些函數(shù),可以進(jìn)行模擬實(shí)驗(yàn)、生成隨機(jī)樣本、進(jìn)行隨機(jī)抽樣等操作,支持?jǐn)?shù)據(jù)分析和統(tǒng)計(jì)推斷的應(yīng)用。
6.NumPy數(shù)據(jù)的輸入輸出
在數(shù)據(jù)分析中,NumPy提供了多種方式來進(jìn)行數(shù)據(jù)的輸入和輸出。以下是NumPy中常用的數(shù)據(jù)輸入輸出方式的詳細(xì)解釋:
從文件讀取數(shù)據(jù):
-
np.loadtxt(fname, delimiter=None, dtype=float):從文本文件中加載數(shù)據(jù)到NumPy數(shù)組??梢灾付ǚ指舴蛿?shù)據(jù)類型。 -
np.genfromtxt(fname, delimiter=None, dtype=float):從文本文件中加載數(shù)據(jù)到NumPy數(shù)組,支持缺失值處理和數(shù)據(jù)類型推斷。 -
np.fromfile(file, dtype=float, count=-1, sep=''):從二進(jìn)制文件中加載數(shù)據(jù)到NumPy數(shù)組。
將數(shù)據(jù)寫入文件:
np.savetxt(fname, X, fmt='%.18e', delimiter=' '):將NumPy數(shù)組保存為文本文件??梢灾付ǜ袷胶头指舴?/p>np.savetxt(fname, X, fmt='%.18e', delimiter=' ', header='', footer='', comments='# '):將NumPy數(shù)組保存為文本文件,并添加頭部、尾部和注釋。
從CSV文件讀取數(shù)據(jù):np.genfromtxt(fname, delimiter=',', dtype=None, names=True):從CSV文件中加載數(shù)據(jù)到NumPy結(jié)構(gòu)化數(shù)組。可以指定分隔符、數(shù)據(jù)類型和列名。
將數(shù)據(jù)寫入CSV文件:
-
np.savetxt(fname, X, delimiter=',', fmt='%.18e', header='', footer='', comments='# '):將NumPy數(shù)組保存為CSV文件??梢灾付ǚ指舴?、格式、頭部、尾部和注釋。
從數(shù)據(jù)庫讀取數(shù)據(jù):
-
np.frombuffer(buffer, dtype=float, count=-1, offset=0):從緩沖區(qū)中加載數(shù)據(jù)到NumPy數(shù)組。 -
np.fromstring(string, dtype=float, count=-1, sep=''):從字符串中加載數(shù)據(jù)到NumPy數(shù)組。
將數(shù)據(jù)寫入數(shù)據(jù)庫:
-
np.ndarray.tofile(fid, sep='', format='%s'):將NumPy數(shù)組保存為二進(jìn)制文件。
這些數(shù)據(jù)輸入輸出函數(shù)提供了靈活的方式來讀取和寫入數(shù)據(jù),支持多種數(shù)據(jù)格式和數(shù)據(jù)源。通過使用這些函數(shù),可以方便地進(jìn)行數(shù)據(jù)的導(dǎo)入和導(dǎo)出,與其他數(shù)據(jù)源進(jìn)行交互,并進(jìn)行數(shù)據(jù)分析和處理。
二丶Pandas篇
1.pandas核心概念
在數(shù)據(jù)分析中,pandas是一個(gè)重要的Python庫,提供了高效的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。以下是pandas的核心概念的詳細(xì)解釋:
Series(序列):
Series是pandas中的一維標(biāo)記數(shù)組,類似于帶有標(biāo)簽的一維數(shù)組。它由兩個(gè)數(shù)組組成,一個(gè)用于存儲數(shù)據(jù),另一個(gè)用于存儲標(biāo)簽(索引)。
Series可以通過多種方式創(chuàng)建,例如從列表、數(shù)組、字典等。
Series提供了許多方法和屬性,用于對數(shù)據(jù)進(jìn)行索引、切片、過濾、計(jì)算等操作。
DataFrame(數(shù)據(jù)框):
DataFrame是pandas中的二維表格數(shù)據(jù)結(jié)構(gòu),類似于電子表格或SQL中的表。它由行索引和列索引組成,每列可以是不同的數(shù)據(jù)類型。
DataFrame可以通過多種方式創(chuàng)建,例如從二維數(shù)組、字典、CSV文件等。
DataFrame提供了豐富的方法和屬性,用于對數(shù)據(jù)進(jìn)行索引、切片、過濾、計(jì)算、合并、重塑等操作。
Index(索引):
Index是pandas中的標(biāo)簽數(shù)組,用于標(biāo)識Series或DataFrame中的行或列。
Index可以是整數(shù)、字符串、日期等類型,可以是唯一的或重復(fù)的。
Index提供了許多方法和屬性,用于對索引進(jìn)行操作和處理。
數(shù)據(jù)對齊:
pandas的一個(gè)重要特性是數(shù)據(jù)對齊,即在進(jìn)行操作時(shí),pandas會自動(dòng)根據(jù)索引對數(shù)據(jù)進(jìn)行對齊,確保數(shù)據(jù)的正確對應(yīng)。
數(shù)據(jù)對齊使得在處理不完整或不規(guī)則數(shù)據(jù)時(shí)更加方便,可以避免許多錯(cuò)誤和麻煩。
缺失數(shù)據(jù)處理:
pandas提供了靈活的方法來處理缺失數(shù)據(jù),例如使用NaN(Not a Number)表示缺失值。
可以使用方法如isnull()、notnull()、dropna()、fillna()等來檢測和處理缺失數(shù)據(jù)。
數(shù)據(jù)分組和聚合:
pandas提供了強(qiáng)大的數(shù)據(jù)分組和聚合功能,可以根據(jù)某些條件將數(shù)據(jù)分組,并對每個(gè)組進(jìn)行聚合操作,如求和、平均值、計(jì)數(shù)等。
可以使用方法如groupby()、agg()、transform()等來進(jìn)行數(shù)據(jù)分組和聚合操作。
這些核心概念是pandas在數(shù)據(jù)分析中的基礎(chǔ),通過靈活運(yùn)用這些概念和相應(yīng)的方法,可以高效地進(jìn)行數(shù)據(jù)處理、分析和建模。
2.數(shù)據(jù)結(jié)構(gòu)series索引
在pandas中,Series是一種一維的數(shù)據(jù)結(jié)構(gòu),類似于帶有標(biāo)簽的數(shù)組。Series具有兩個(gè)主要的組成部分:數(shù)據(jù)和索引。以下是對pandas Series索引的詳細(xì)解釋:
索引標(biāo)簽:
Series的索引是一組標(biāo)簽,用于標(biāo)識每個(gè)元素。索引可以是整數(shù)、字符串、日期等類型。
索引標(biāo)簽可以通過series.index屬性訪問。
默認(rèn)索引:
如果沒有顯式指定索引標(biāo)簽,pandas會自動(dòng)創(chuàng)建一個(gè)默認(rèn)的整數(shù)索引,從0開始遞增。
默認(rèn)索引可以通過series.index屬性訪問。
自定義索引:
可以通過傳遞一個(gè)索引列表來創(chuàng)建自定義索引的Series。例如,series = pd.Series(data, index=['a', 'b', 'c'])。
自定義索引可以是唯一的或重復(fù)的。
索引操作:
可以使用索引標(biāo)簽來訪問Series中的元素。例如,series['a']表示訪問索引標(biāo)簽為'a'的元素。
可以使用整數(shù)索引來訪問Series中的元素。例如,series[0]表示訪問索引為0的元素。
可以使用切片操作來訪問Series中的多個(gè)元素。例如,series['a':'c']表示訪問索引標(biāo)簽從'a'到'c'的元素。
索引對齊:
在進(jìn)行操作時(shí),pandas會自動(dòng)根據(jù)索引對Series進(jìn)行對齊,確保數(shù)據(jù)的正確對應(yīng)。
索引對齊使得在處理不完整或不規(guī)則數(shù)據(jù)時(shí)更加方便,可以避免許多錯(cuò)誤和麻煩。
索引修改:
可以通過重新賦值的方式修改Series的索引。例如,series.index = ['x', 'y', 'z']。
通過靈活運(yùn)用Series的索引,可以方便地對數(shù)據(jù)進(jìn)行訪問、操作和分析。索引提供了一種標(biāo)簽化的方式來標(biāo)識和定位數(shù)據(jù),使得數(shù)據(jù)處理更加直觀和高效。
3.series基礎(chǔ)技巧
當(dāng)進(jìn)行數(shù)據(jù)分析時(shí),pandas的Series是一個(gè)非常有用的數(shù)據(jù)結(jié)構(gòu)。以下是一些常見的Series基礎(chǔ)技巧的詳細(xì)解釋:
創(chuàng)建Series:
可以使用pd.Series(data, index)函數(shù)創(chuàng)建Series,其中data可以是列表、數(shù)組、字典等,index是可選的索引標(biāo)簽。
例如,s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])創(chuàng)建了一個(gè)帶有自定義索引的Series。
訪問Series數(shù)據(jù):
可以使用索引標(biāo)簽或整數(shù)索引來訪問Series中的元素。例如,s['a']或s[0]都可以訪問第一個(gè)元素。
可以使用切片操作來訪問Series中的多個(gè)元素。例如,s['a':'c']表示訪問索引標(biāo)簽從'a'到'c'的元素。
Series運(yùn)算:
可以對Series進(jìn)行基本的數(shù)學(xué)運(yùn)算,如加法、減法、乘法和除法。運(yùn)算會根據(jù)索引對齊數(shù)據(jù)。
例如,s1 + s2會對兩個(gè)Series對象進(jìn)行元素級別的加法運(yùn)算,并根據(jù)索引對齊數(shù)據(jù)。
篩選數(shù)據(jù):
可以使用布爾索引來篩選Series中的數(shù)據(jù)。例如,s[s > 2]會返回滿足條件的元素。
可以使用isin()方法來篩選Series中包含在給定值列表中的元素。
缺失數(shù)據(jù)處理:
可以使用isnull()和notnull()方法來檢測Series中的缺失數(shù)據(jù)。
可以使用dropna()方法來刪除Series中的缺失數(shù)據(jù)。
可以使用fillna()方法來填充Series中的缺失數(shù)據(jù)。
排序和排名:
可以使用sort_values()方法對Series進(jìn)行排序。
可以使用rank()方法對Series中的元素進(jìn)行排名。
統(tǒng)計(jì)分析:
可以使用describe()方法獲取Series的統(tǒng)計(jì)摘要信息,如均值、標(biāo)準(zhǔn)差、最小值、最大值等。
可以使用sum()、mean()、median()、std()等方法計(jì)算Series的總和、平均值、中位數(shù)、標(biāo)準(zhǔn)差等。
這些基礎(chǔ)技巧可以幫助您更好地使用pandas的Series進(jìn)行數(shù)據(jù)分析和處理。通過靈活運(yùn)用這些技巧,可以輕松地操作和分析Series中的數(shù)據(jù)。
4.數(shù)據(jù)結(jié)構(gòu)Dataframe基本概念及創(chuàng)建
在數(shù)據(jù)分析中,pandas的DataFrame是一個(gè)二維的表格型數(shù)據(jù)結(jié)構(gòu),類似于電子表格或SQL中的表。DataFrame由行索引和列索引組成,每列可以是不同的數(shù)據(jù)類型。以下是對pandas DataFrame的基本概念和創(chuàng)建方式的詳細(xì)解釋:
DataFrame的基本概念:
DataFrame是一個(gè)二維的數(shù)據(jù)結(jié)構(gòu),由行和列組成。行索引用于標(biāo)識和訪問DataFrame中的行,列索引用于標(biāo)識和訪問DataFrame中的列。DataFrame中的每列可以是不同的數(shù)據(jù)類型,如整數(shù)、浮點(diǎn)數(shù)、字符串等。
創(chuàng)建DataFrame的方式:
從列表或數(shù)組創(chuàng)建:可以使用pd.DataFrame(data, index, columns)函數(shù)從列表或數(shù)組創(chuàng)建DataFrame。其中data可以是列表、數(shù)組、字典等,index是行索引,columns是列索引。
-
從字典創(chuàng)建:可以使用
pd.DataFrame(dict)函數(shù)從字典創(chuàng)建DataFrame。字典的鍵將成為列索引,字典的值將成為列數(shù)據(jù)。 -
從CSV文件創(chuàng)建:可以使用
pd.read_csv(file)函數(shù)從CSV文件創(chuàng)建DataFrame。 -
從數(shù)據(jù)庫查詢結(jié)果創(chuàng)建:可以使用
pd.read_sql(query, connection)函數(shù)從數(shù)據(jù)庫查詢結(jié)果創(chuàng)建DataFrame。
DataFrame的屬性和方法:
-
df.shape:返回DataFrame的行數(shù)和列數(shù)。 -
df.head(n):返回DataFrame的前n行,默認(rèn)為5行。 -
df.tail(n):返回DataFrame的后n行,默認(rèn)為5行。 -
df.columns:返回DataFrame的列索引。 -
df.index:返回DataFrame的行索引。 -
df.info():顯示DataFrame的基本信息,包括列名、數(shù)據(jù)類型、非空值數(shù)量等。 -
df.describe():顯示DataFrame的統(tǒng)計(jì)摘要信息,包括計(jì)數(shù)、均值、標(biāo)準(zhǔn)差、最小值、最大值等。
通過靈活運(yùn)用這些創(chuàng)建DataFrame的方式和使用DataFrame的屬性和方法,可以方便地進(jìn)行數(shù)據(jù)分析和處理。DataFrame提供了豐富的功能和方法,支持?jǐn)?shù)據(jù)的索引、切片、過濾、計(jì)算、合并、重塑等操作。
6.Dataframe索引
在pandas中,DataFrame是一個(gè)二維的表格型數(shù)據(jù)結(jié)構(gòu),由行索引和列索引組成。以下是對pandas DataFrame索引的詳細(xì)解釋:
行索引:
行索引用于標(biāo)識和訪問DataFrame中的行。默認(rèn)情況下,行索引是從0開始的整數(shù)索引,可以通過df.index屬性訪問??梢允褂?code>df.loc[label]或df.iloc[index]來訪問具有特定標(biāo)簽或整數(shù)索引的行。
列索引:
列索引用于標(biāo)識和訪問DataFrame中的列。默認(rèn)情況下,列索引是從0開始的整數(shù)索引,可以通過df.columns屬性訪問??梢允褂?code>df[column]或df.loc[:, column]來訪問具有特定列名的列。
自定義索引:
可以通過傳遞一個(gè)索引列表來創(chuàng)建自定義的行索引或列索引。例如,df = pd.DataFrame(data, index=['a', 'b', 'c'])。自定義索引可以是唯一的或重復(fù)的。
多級索引:
多級索引是指在DataFrame中使用多個(gè)層次的行索引或列索引。可以使用pd.MultiIndex.from_arrays()、pd.MultiIndex.from_tuples()或pd.MultiIndex.from_product()等函數(shù)創(chuàng)建多級索引。可以使用df.index或df.columns屬性訪問多級索引。
索引操作:
可以使用df.loc[row_indexer, column_indexer]來訪問具有特定行索引和列索引的數(shù)據(jù)??梢允褂们衅僮鱽碓L問DataFrame中的多行或多列。例如,df.loc['a':'c', 'x':'z']表示訪問行索引從'a'到'c'和列索引從'x'到'z'的數(shù)據(jù)。
重置索引:
可以使用df.reset_index()方法重置行索引,將原來的行索引轉(zhuǎn)換為默認(rèn)的整數(shù)索引??梢允褂?code>df.set_index(keys)方法設(shè)置新的行索引或列索引。通過靈活運(yùn)用DataFrame的索引操作,可以方便地對數(shù)據(jù)進(jìn)行訪問、操作和分析。索引提供了一種標(biāo)簽化的方式來標(biāo)識和定位數(shù)據(jù),使得數(shù)據(jù)處理更加直觀和高效
7.Dataframe基本技巧
在數(shù)據(jù)分析中,pandas的DataFrame是一個(gè)非常有用的數(shù)據(jù)結(jié)構(gòu)。以下是一些常見的DataFrame基本技巧的詳細(xì)解釋:
訪問DataFrame數(shù)據(jù):
- 可以使用列名來訪問DataFrame中的列數(shù)據(jù)。例如,
df['column_name']可以訪問名為'column_name'的列。 - 可以使用
df.loc[row_indexer, column_indexer]來訪問具有特定行索引和列索引的數(shù)據(jù)。 - 可以使用
df.iloc[row_indexer, column_indexer]來使用整數(shù)索引訪問數(shù)據(jù)。
列操作:
- 可以使用
df['new_column'] = value來添加新的列,并為每個(gè)元素賦予相同的值。 - 可以使用
df.drop('column_name', axis=1)來刪除指定的列。 - 可以使用
df.rename(columns={'old_name': 'new_name'})來重命名列。
行操作:
- 可以使用
df.loc[row_indexer]來訪問具有特定行索引的行數(shù)據(jù)。 - 可以使用
df.iloc[row_indexer]來使用整數(shù)索引訪問行數(shù)據(jù)。 - 可以使用
df.drop(row_indexer)來刪除指定的行。
篩選數(shù)據(jù):
- 可以使用布爾索引來篩選DataFrame中的數(shù)據(jù)。例如,df[df['column'] > 0]會返回滿足條件的行數(shù)據(jù)。
- 可以使用
df.isin(values)來篩選DataFrame中包含在給定值列表中的行數(shù)據(jù)。
缺失數(shù)據(jù)處理:
- 可以使用
df.isnull()和df.notnull()方法來檢測DataFrame中的缺失數(shù)據(jù)。 - 可以使用
df.dropna()方法來刪除DataFrame中的缺失數(shù)據(jù)。 - 可以使用
df.fillna(value)方法來填充DataFrame中的缺失數(shù)據(jù)。
排序和排名:
- 可以使用
df.sort_values(by='column')方法對DataFrame進(jìn)行排序。 - 可以使用
df.rank()方法對DataFrame中的元素進(jìn)行排名。
統(tǒng)計(jì)分析:
- 可以使用
df.describe()方法獲取DataFrame的統(tǒng)計(jì)摘要信息,如計(jì)數(shù)、均值、標(biāo)準(zhǔn)差、最小值、最大值等。 - 可以使用
df.sum()、df.mean()、df.median()、df.std()等方法計(jì)算DataFrame的總和、平均值、中位數(shù)、標(biāo)準(zhǔn)差等。
這些基本技巧可以更好地使用pandas的DataFrame進(jìn)行數(shù)據(jù)分析和處理。通過靈活運(yùn)用這些技巧,可以輕松地操作和分析DataFrame中的數(shù)據(jù)。
8.時(shí)間模塊
在數(shù)據(jù)分析中,pandas的時(shí)間模塊提供了強(qiáng)大的時(shí)間序列處理功能。以下是pandas時(shí)間模塊的一些常用功能和方法的詳細(xì)解釋:
時(shí)間戳(Timestamp):
時(shí)間戳表示某個(gè)具體的時(shí)間點(diǎn),可以使用pd.Timestamp()函數(shù)創(chuàng)建時(shí)間戳對象。時(shí)間戳可以用于表示日期、時(shí)間或日期時(shí)間。
時(shí)間范圍(DatetimeIndex):
時(shí)間范圍是一種特殊的索引類型,用于表示一段連續(xù)的時(shí)間序列??梢允褂?code>pd.date_range()函數(shù)創(chuàng)建時(shí)間范圍對象,指定起始日期、結(jié)束日期和頻率。
時(shí)間序列數(shù)據(jù)(Series):
時(shí)間序列數(shù)據(jù)是指按照時(shí)間順序排列的數(shù)據(jù),可以使用時(shí)間戳或時(shí)間范圍作為索引??梢允褂?code>pd.Series()函數(shù)創(chuàng)建時(shí)間序列對象,指定數(shù)據(jù)和索引。
時(shí)間戳索引(DatetimeIndex):
- 時(shí)間戳索引是一種特殊的索引類型,用于按照時(shí)間順序?qū)?shù)據(jù)進(jìn)行索引和切片。
- 可以使用
pd.to_datetime()函數(shù)將字符串轉(zhuǎn)換為時(shí)間戳索引。 - 可以使用
df.set_index()方法將時(shí)間戳索引設(shè)置為DataFrame的索引。
時(shí)間序列的重采樣:
重采樣是指將時(shí)間序列數(shù)據(jù)從一個(gè)頻率轉(zhuǎn)換為另一個(gè)頻率的過程,如從日頻率轉(zhuǎn)換為月頻率。可以使用resample()方法對時(shí)間序列進(jìn)行重采樣,指定目標(biāo)頻率和聚合函數(shù)。
時(shí)間序列的偏移:
時(shí)間序列的偏移是指將時(shí)間序列按照一定的時(shí)間間隔進(jìn)行移動(dòng)的操作??梢允褂?code>shift()方法對時(shí)間序列進(jìn)行向前或向后的偏移。
時(shí)間序列的滾動(dòng)窗口:
- 滾動(dòng)窗口是指在時(shí)間序列上按照固定大小的窗口進(jìn)行滑動(dòng),并對窗口內(nèi)的數(shù)據(jù)進(jìn)行聚合操作。
- 可以使用
rolling()方法創(chuàng)建滾動(dòng)窗口對象,然后使用聚合函數(shù)對窗口內(nèi)的數(shù)據(jù)進(jìn)行計(jì)算。 - 通過靈活運(yùn)用pandas的時(shí)間模塊,可以方便地處理和分析時(shí)間序列數(shù)據(jù),進(jìn)行時(shí)間相關(guān)的計(jì)算和操作。時(shí)間模塊提供了豐富的功能和方法,支持時(shí)間戳的創(chuàng)建、時(shí)間范圍的生成、時(shí)間序列的重采樣、偏移和滾動(dòng)窗口等操作。