3、pandas基礎(chǔ)操作
1. pandas 介紹
1.1 為什么學(xué)習(xí)pandas
- numpy已經(jīng)可以幫助我們進(jìn)行數(shù)據(jù)的處理了趋厉,那么學(xué)習(xí)pandas的目的是什么呢寨闹?
- numpy能夠幫助我們處理的是數(shù)值型的數(shù)據(jù),當(dāng)然在數(shù)據(jù)分析中除了數(shù)值型的數(shù)據(jù)還有好多其他類型的數(shù)據(jù)(字符串君账, 時間序列)繁堡,那么pandas就可以幫我們很好的處理除了數(shù)值型的其他數(shù)據(jù)!
什么是pandas?
- 首先先來認(rèn)識pandas中的兩個常用的類
- Series
- DataFrame
2. Series 的簡單使用
Series是一種類似與一維數(shù)組的對象,由下面兩個部分組成:
- values:一組數(shù)據(jù)(ndarray類型)
- index:相關(guān)的數(shù)據(jù)索引標(biāo)簽
2.1 Series的創(chuàng)建方式
# 導(dǎo)入Series椭蹄、pandas相關(guān)包
from pandas import Series
(1)由列表創(chuàng)建
s = Series(data=[1,2,3,'four'])
s
(2)由numpy數(shù)組創(chuàng)建
import numpy as np
s = Series(data=np.random.randint(0,100,size=(3,)))
s
(3)index 用來指定顯示索引
s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
s
(4)使用字典創(chuàng)建
dic ={
'語文':80,
'數(shù)學(xué)':70,
'英語':60
}
s = Series(data=dic)
s
2.2 Series索引的作用
(1)顯示索引可以增強(qiáng)Series的可讀行
(2)Series的索引和切片
# 查看隱式索引為0的行數(shù)據(jù)
s[0]
# 查看顯示索引為'語文'的行數(shù)據(jù)
s.語文
# 查看0到2行的行數(shù)據(jù)
s[0:2]
2.3 Series的常用屬性
(1)shape 查看Series形狀
(2)size 查看Series的大小
(3)index 返回Series索引
(4)values 返回Series值
(5)dtype 返回元素類型
2.4 Series的常用方法
創(chuàng)建一個樣本
s = Series(data=np.random.randint(60,100,size=(10,)))
s
(1)head()顯示前N個數(shù)組 闻牡,默認(rèn)是5個
s.head()
(2)tail() 顯示后n個
s.tail(3) #顯示后n個
(3)unique() 去重
s.unique() #去重
(4)isnull() 判斷每一個元素是否為空
s.isnull() #判斷每一個元素是否為空
(5)notnull() 判斷每一個元素是否為非空
s.notnull() #判斷每一個元素是否為非空
2.5 Series 的算術(shù)運(yùn)算
索引一致的元素進(jìn)行算術(shù)運(yùn)算,否則為空
s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[1,2,3],index=['a','d','c'])
s = s1 + s2
s
3. DataFrane的簡單使用
DataFrame是一個【表格型】的數(shù)據(jù)結(jié)構(gòu)绳矩。DataFrame由按一定順序排列的多列數(shù)據(jù)組成罩润。設(shè)計(jì)初衷是將Series的使用場景從—維拓展到多維。DataFrame既有行索引埋酬,也有列索引哨啃。
- 行索引 :index
- 列索引: columns值: values
3.1 DataFrame的創(chuàng)建
# 導(dǎo)入DataFrame 模塊
from pandas import DataFrame
(1)ndarray創(chuàng)建
df = DataFrame(data=np.random.randint(0,100,size=(6,4)))
df
(2)字典創(chuàng)建
dic ={
'name':['a','d','c'],
'age':[11,12,13]
}
df = DataFrame(data=dic,index=['a','b','c'])
df
3.2 DataFrame 的屬性
(1)values 查看DataFrame 的值
df.values
(2)columns 查看DataFrame 的列索引
df.columns
(3)index 查看DataFrame 的行索引
df.index
(4)shape 查看DataFrame的形狀
df.shape
3.3 練習(xí)
根據(jù)以下考試成績表,創(chuàng)建一個DataFrame写妥,命名為df:
張三 | 李四 | |
---|---|---|
語文 | 150 | 50 |
數(shù)學(xué) | 150 | 50 |
英語 | 150 | 50 |
理綜 | 150 | 50 |
dic ={
'張三': [150,150,150,300],
'李四': [0,0,0,0]
}
s = DataFrame(data=dic,index=['語文','數(shù)學(xué)','英語','理綜'])
s
3.4 DataFrame索引操作
創(chuàng)建樣本
df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
df
(1)對列進(jìn)行索引取值
df['a'] #取單列拳球,如果df有顯示的索引,通過索引機(jī)制取行或者列的時候只可以使用顯示索引
(2)取多列
df[['a','c']] #取多列
(3)iloc:通過隱式索引取行
#取單行
df.iloc[0]
# 取單列
df.iloc[:,0]
#取多行
df.iloc[[0,3,5]]
#取多列
df.iloc[:,[0,2,3]]
#取第0行第三列的數(shù)據(jù)
df.iloc[0,3]
#取多個元素
df.loc[[1,3,5],'c']
(4)loc:通過顯示索引取行
#取單行
df.loc[:,'a']
#取多列
df.loc[:,['a','b']]
# 取多個元素
df.loc[[1,3,5],'c']
3.5 DataFrame的切片操作
(1)對行進(jìn)行切片
df[0:3]
(2)對列進(jìn)行切片
df.iloc[:,0:2]
(3)對行和列進(jìn)行切片
df.iloc[0:2,0:2]
3. 6 總結(jié):
- df 索引和切片操作
- 索引:
- df[col]:取列
- df.loc[index]:取列珍特,顯示索引
- df.iloc[index]:取列祝峻,隱式索引
- df.iloc[index,col]:取元素,隱式索引
- 切片:
- df[index1,index2]:切行
- df.iloc[:,col1:col2]:切列
- 索引:
3.7 練習(xí)
要求:
1.假設(shè)ddd是期中考試成績扎筒,ddd2是期末考試成績莱找,請自由創(chuàng)建ddd2,并將其與ddd相加嗜桌,求期中期末平均值
2.假設(shè)張三期中考試數(shù)學(xué)被發(fā)現(xiàn)作弊奥溺,要記為0分,如何實(shí)現(xiàn)?
3.李四因?yàn)榕e報(bào)張三作弊立功骨宠,期中考試所有科目加100分浮定,如何實(shí)現(xiàn)?
4.后來老師發(fā)現(xiàn)有一道題出錯了,為了安撫學(xué)生情緒层亿,給每位學(xué)生每個科目都加10分桦卒,如何實(shí)現(xiàn)?
(1)創(chuàng)建數(shù)據(jù)結(jié)構(gòu)
dic1 ={
'張三':[100,100,100,100],
'李四':[80,80,80,80]
}
dic2 ={
'張三':[80,80,80,80],
'李四':[100,100,100,100]
}
#期中
ddd = DataFrame(data=dic1,index=['語文','數(shù)學(xué)','英語','理綜'])
#期末
ddd2 = DataFrame(data=dic2,index=['語文','數(shù)學(xué)','英語','理綜'])
(2)計(jì)算期中期末的平均值
#總分
count = ddd + ddd2
#平均值
ave = count / 2
(3)張三期中考試數(shù)學(xué)被發(fā)現(xiàn)作弊,要記為0分
#張三期中考試數(shù)學(xué)記為0分
ddd.loc['數(shù)學(xué)','張三']=0
ddd
(4)將李四所有成績加100
#將李四所有成績加100
ddd.loc[:,'李四']+=100 #ddd['李四'] += 100
ddd
(5)給所有學(xué)生每個科目加10分
#給所有學(xué)生每個科目加10分
ddd.loc[:]+=10 # ddd += 10
ddd
3.8 時間數(shù)據(jù)類型的轉(zhuǎn)換
- pd.to_datetime(col) 時間數(shù)據(jù)類型的轉(zhuǎn)換
(1)創(chuàng)建樣本
import pandas as pd
dic = {
'time':['2021-9-8','2021-8-8','2021-7-8'],
'temp':[10,20,30]
}
df = DataFrame(data=dic)
df
(2)查看time列的類型
#查看time列的類型 字符串類型
df['time'].dtype
(3)將time列轉(zhuǎn)為時間類型
df['time'] = pd.to_datetime(df['time'])
df
- 將time列作為原數(shù)據(jù)的行索引 inplace是否覆蓋原df
df.set_index('time',inplace=True)
df