1.pandas:
Pandas是一個(gè)強(qiáng)大的分析結(jié)構(gòu)化數(shù)據(jù)的工具集拥峦;它的使用基礎(chǔ)是Numpy(提供高性能的矩陣運(yùn)算);用于數(shù)據(jù)挖掘和數(shù)據(jù)分析庞钢,同時(shí)也提供數(shù)據(jù)清洗功能瞳购。
利器:
Series: 它是一種類似于一維數(shù)組的對(duì)象,是由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成玖绿。
DataFrame:DataFrame是Pandas中的一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu)敛瓷,包含有一組有序的列,每列可以是不同的值類型(數(shù)值斑匪、字符串呐籽、布爾型等),DataFrame即有行索引也有列索引蚀瘸,可以被看做是由Series組成的字典
2.使用pandas:
1).對(duì)象創(chuàng)建Series ?
?? list狡蝶,ndarray,元組贮勃,dict
? s = pd.Series(data=list|ndarray|元組|dict,index=[....],name=‘’)? # 其中ndarray可應(yīng)用array的生成方法贪惹,如random.randint()產(chǎn)生。 # 其中index可通過(guò)index=list('QWERTYUIOP')的方式創(chuàng)建寂嘉。
2).索引和切片
3).方法和屬性
3.對(duì)象創(chuàng)建Series:
2種方式:
(1)方式一
import pandas as pd
list1 = [3,5,7,8,9,9,0]
s = pd.Series(data = list1,index=['A','B','C','D','E','F','G'],name='level')
# 此種方式奏瞬,list1增減元素,不影響s泉孩。(此次可溫習(xí)深淺拷貝)
(2)方式二
import numpy as np
arr = np.random.randint(1,30,size=10)
pd.Series(arr) # 如果修改元素則Series受到影響
# 元素np.nan 顯示NAN
(3)方式三:字典創(chuàng)建對(duì)象:
dict1 = {'python':100,'java':99,'C++':89}
pd.Series(data=dict1)
# ? 如出現(xiàn)空值硼端,會(huì)顯示NaN :not a number(浮點(diǎn)類型)
4. 索引和切片
創(chuàng)建series
import pandas as pd
import numpy as np
s1 = pd.Series(data=np.random.randint(1,30,size=10),index=list('ABCDEFGHIJ'))
s1#
索引和切片
(1)顯示索引:
- 獲取單個(gè)元素
????????s['A'] ? # 27
? ? ? ? s.loc['A']? #? 官方推薦? # 27
?? - 獲取多個(gè)元素:
? ? s.loc[['A','B','A']]? ----> 返回值是Series類型的? # 可取重復(fù)元素
s1.loc[[True,False,True,False,True,False,True,False,True,False]]
# 可以使用bool的列表獲取元素,但是bool列表的長(zhǎng)度必須要與s1對(duì)象的元素個(gè)數(shù)一致
(2)隱式索引?0~n-1 元素A-J對(duì)應(yīng)隱式索引0-9
? ? s[0]? # A
? ? s.iloc[0]? # 官方推薦?
? ? 獲取多個(gè)元素:
? ? s.iloc[[0,5,7]] ? #? 可取重復(fù)元素
(3)切片:
?- 顯式:
? s1['E':'H']
? s1[::2]
? s1[::-1] ? # 步長(zhǎng)-1寓搬,反向取
? s1['B'::3] ? # 步長(zhǎng)為3?
-隱式:類似列表
5.方法和屬性显蝌;
index values size shape(5,)
s.size # 屬性:獲取元素得到個(gè)數(shù) # 如4
s.values # 得到值:如:array([150, 150, 150, 300], dtype=int64)
s.shape # 屬性: 獲取形狀 如:(4,) ? 4行1列
Series方法:
s = pd.Series(data=np.random.randint(1,10,size=6),index=list('CDFABE'))
head(n) ??獲取前n個(gè)元素 ? ?s.head(4)? # 如不傳參數(shù),默認(rèn)5個(gè)數(shù)據(jù)。
tail(n) ??獲取后n個(gè)元素 ??s.tail(2)
sort_index(ascending=False) 降序 ?#s.sort_index(ascending=False)
sort_values(ascending=True)? 默認(rèn)是升序 #?s.sort_values()
value_counts()? 統(tǒng)計(jì)值元素的個(gè)數(shù) ?s2.value_counts()
unique() 去重? #? s2.unique()
nunique() 去重后的數(shù)量
isnull()? NaN ??
notnull()
r.isnull().any() # any() 判斷整個(gè)數(shù)組中是否至少有一個(gè)符合條件True曼尊,則返回結(jié)果是True,否則返回False
# all()? 判斷整個(gè)數(shù)組中是否全部滿足條件酬诀,如果全部滿足則返回True,否則返回False
補(bǔ)充:
all()函數(shù)用于判斷整個(gè)數(shù)組中的元素的值是否全部滿足條件骆撇,如果滿足條件返回True瞒御,否則返回False。
any()函數(shù)用于判斷整個(gè)數(shù)組中的元素至少有一個(gè)滿足條件就返回True神郊,否則返回False肴裙。
# 切片和索引:例:
s = pd.Series(data={ "語(yǔ)文":150,"數(shù)學(xué)":150,"英語(yǔ)":150,"理綜":300})
(1)得到: 數(shù)學(xué) 150
s.loc["數(shù)學(xué)"] ? ?? s.iloc[1] ?? s["數(shù)學(xué)"] ? ? s[1] ? s[[False, True, False, False]]
s[s.index=='數(shù)學(xué)'] ??
詳解:# ?s.index # 屬性之一 可得到:Index(['語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)', '理綜'], dtype='object')
# ?s.index=='數(shù)學(xué)'? # 得到?array([False, True, False, False])
#?s[s.index=='數(shù)學(xué)']? # 得到 ? 數(shù)學(xué)? ? 150 ? dtype: int64
(2)得到?語(yǔ)文 150? 數(shù)學(xué) 150? 英語(yǔ) 150?
s['語(yǔ)文':'英語(yǔ)'] ? ?? s.loc['語(yǔ)文':'英語(yǔ)'] ??s[:3] ? ?s.iloc[:3]
s[[True,True,True,False]] ? ??s[s.index!='理綜']
s[s.values!=300]?
# 詳解:?s.values? 得到:array([ True,? True,? True, False])
#?s.values!=300? 得到:array([ True, True, True, False])
6.?Series的運(yùn)算:
兩個(gè)series對(duì)象可以進(jìn)行基本的+-*/運(yùn)算? #?# add() sub() mul() div() mod() 類似: + - * / % ? 如:python.add(java)? 類似于?python+java
series+1? 廣播機(jī)制
series+ndarray? 形狀相同才可以加法操作? 如:s3+arr
series+series:# 在進(jìn)行加法操作的時(shí)候都是索引一致的才會(huì)進(jìn)行相加
mean()? #?python.mean()
max()
min()#?python.min()
python.loc[python>python.mean()]
s1.count()? 計(jì)數(shù)
例:
解答如下: