【Python数据分析与展示】.MOOC. 北京理工大学
Pandas库Series类型(pandas库的一维数据类型)
Numpy | Pandas |
---|---|
基础数据类型 | 扩展数据类型 |
关注数据的结构表达 | 关注数据的应用表达 |
维度:数据间关系 | 数据域索引间关系 |
Series类型(Series=索引+一维数据)
import pandas as pd
a = pd.Series([9,8,7,6]) #已有自动索引
import pandas as pd
b = pd.Series([9,8,7,6],index=['a','b','c','d']) #指定索引index,作为第二个参数可省略index=
Series类型创建:
Python列表(index与列表元素个数一致)
标量值
import pandas as pd
s = pd.Series(25,index=['a','b','c']) #不能省略第二个参数,此处的索引说明了有三个元素,不同索引下相同的值:25
Python字典
import pandas as pd
d = pd.Series({'a':9,'b':8,'c':7}) #键值对,键:索引
e = pd.Series({'a':9,'b':8,'c':7},index=['c','a','b','d']) #前面各自索引对应各自的值,后面的index相当于用索引排序
ndarray(索引和数据都可以通过ndarray类型创建)
import pandas as pd
import numpy as np
n = pd.Series(np.arange(5)) #arange()函数生成5个元素的ndarray类型
n = pd.Series(np.arange(5),index=np.arange(9,4,-1))
其他函数(range()函数等)
Series类型的基本操作index
,values
import pandas as pd
b = pd.Series([9,8,7,6],['a','b','c','d'])
b.index #获得索引
b.values #获得数据
自动索引和自定义索引并存(两种索引不能混用)
import pandas as pd
b = pd.Series([9,8,7,6],['a','b','c','d'])
b[1] #为自动索引,与自定义索引b['b']输出结果相同,
Series类型的操作类似ndarray类型
import pandas as pd
b = pd.Series([9,8,7,6],['a','b','c','d'])
b[:3]
Series类型的操作类似Python字典类型
通过自定义索引访问
保留字in操作
使用.get()方法
import pandas as pd
b = pd.Series([9,8,7,6],['a','b','c','d'])
b['b']
'c' in b #in:判断所给字段是否在Series索引列表中
0 in b #判断0是否在用户自定义的索引中,不会判断自动索引
b.get('f',100) #从b中提取标签'f'对应的值,若无第二个参数则返回空
Series类型对齐操作
import pandas as pd
a = pd.Series([1,2,3],['c','d','e']) #三维对象
b = pd.Series([9,8,7,6],['a','b','c','d']) #四维对象
a + b #结果是索引相同的两个值相加,没有相同索引的,相加结果为空
Series类型的name属性(Series对象和索引都可以有一个名字,存在属性.name中)
import pandas as pd
b = pd.Series([9,8,7,6],['a','b','c','d'])
b.name
b.name = 'Series对象'
b.index.name = '索引列'
Series类型的修改(随时修改,即刻生效)
import pandas as pd
b = pd.Series([9,8,7,6],['a','b','c','d'])
b['a'] = 15
b.name = 'Series'
b.name = 'New Series'
b['b','c'] = 20
(Series基本操作类似ndarray和字典,根据索引对齐)
Pandas库DataFrame类型(pandas库的二维数据类型)
DataFrame类型(DataFrame=行列索引+二维数据)
DataFrame是一个表格型数据类型,每列值类型可以不同
DataFrame既有行又有列索引
DataFrame常用语表达二维数据,但可以表达多维数据
DataFrame类型创建
二维ndarray对象
import pandas pd
import numpy as np
d = pd.DataFrame(np.arange(10),reshape(2,5)) #生成自动行和列索引
由一维ndarry、列表、字典、元组、或Series构成的字典
#一维ndarry对象字典创建
import pandas as pd
dt = {'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([9,8,7,6],index=['a','b','c','d'])} #包含键为one和two的两个元素
d = pd.DataFrame(dt) #形成的行索引为abcd,列索引为one,two
pd.DataFrame(dt,index=['b','c','d'],columns=['two','three']) #新生成一个索引,数据根据行列索引自动补齐,没有的值补NAN
import pandas as pd
dl = {'one':[1,2,3,4],'two':[9,8,7,6]}
d = pd.DataFrame(dl,index = ['a','b','c','d']) #可以只给行列数据,其余系统自动补齐,也可给出约定的所有行列数据,其余行列自动补齐
import pandas pd
dl = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,102.0,100.1],
'同比':[120.7,127.3,119.4,140.9,101.4],
'定基':[121.4,127.8,120.0,145.5,101.6]}
d = pd.DataFrame(dl,index=['c1','c2','c3','c4','c5']) #为每一行指定新的索引:c1,c2,c3,c4,c5
输出:
d.index #获取0轴上的索引
d.columns #获取1轴上的索引
d.values #获取数据
d['同比'] #获取列:”同比“
d.loc['c2'] #获取行:c2,旧版本使用:d.ix['c2']
d['同比']['c2'] #获取某个数据
Series类型
其他的DataFrame类型
(DataFram是二维带”标签“数组,基本操作类似Series,依据行列索引)
Pandas库的数据类型操作
重新索引
参数 | 说明 |
---|---|
index,columns | 新的行列自定义索引 |
fill_value | 重新索引中,用于填充缺失位置的值 |
method | 填充方法,ffill当前值向前填充(邻近的前面值),bfill向后填充(邻近的后面的值) |
limit | 最大填充量 |
copy | 默认True,生成新的对象,False时,新旧相等不复制 |
索引类型的常用方法(Series和DataFrame的索引是Index类型,Index对象是不可修改类型)
方法 | 说明 |
---|---|
.append(idx) | 连接另一个Index对象,产生新的Index对象 |
.diff(idx) | 计算差集,产生新的Index对象 |
.intersection(idx) | 计算交集 |
.union(idx) | 计算并集 |
.delete(loc) | 删除loc位置处的元素 |
.insert(loc,e) | 在loc位置增加一个元素e |
.drop() | 删除Series和DataFrame指定行或列索引 (Series只有0轴,操作时默认操作0轴上的元素,而DataFrame有0轴和1轴,对1轴操作时指定axis=1) |
例:
import pandas as pd
dl = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,102.0,100.1],
'同比':[120.7,127.3,119.4,140.9,101.4],
'定基':[121.4,127.8,120.0,145.5,101.6]}
d = pd.DataFrame(dl,index=['c1','c2','c3','c4','c5'])
d = d.reindex(index=['c5','c4','c3','c2','c1']) #reindex重新建立索引
d = d.reindex(columns=['城市','同比','环比','定基']) #改变列的顺序
newc = d.columns.insert(4,'新增') #新增一个元素
newd = d.reindex(columns=newc,fill_value=200) #对新增的元素进行填充
import pandas as pd
dl = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,102.0,100.1],
'同比':[120.7,127.3,119.4,140.9,101.4],
'定基':[121.4,127.8,120.0,145.5,101.6]}
d = pd.DataFrame(dl,index=['c5','c4','c3','c2','c1'])
nc = d.columns.delete(2)
ni = d.index.insert(5,'c0')
nd = d.reindex(index=ni,columns=nc).ffill() #[!]原视频的写法报错
import pandas as pd
dl = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,102.0,100.1],
'同比':[120.7,127.3,119.4,140.9,101.4],
'定基':[121.4,127.8,120.0,145.5,101.6]}
d = pd.DataFrame(dl,index=['c5','c4','c3','c2','c1'])
d.drop('c5')
d.drop('同比',axis=1)
a = pd.Series([9,8,7,6],index=['a','b','c','d'])
a.drop(['b','c'])
Pandas库的数据类型运算
方法形式运算
方法 | 说明 |
---|---|
.add(d,**argws) | 类型间加法运算,可选参数 |
.sub(d,**argws) | 类型间减法运算,可选参数 |
.mul(d,**argws) | 类型间乘法运算,可选参数 |
.div(d,**argws) | 类型间除法运算,可选参数 |
例:
import pandas as pd
import numpy as np
a = pd.DataFram(np.arange(12).reshape(3,4))
b = pd.DataFrame(np.arange(20).rehspae(4,5))
b.add(a,fill_value = 100) #a+b,其中缺少的元素用100补齐
a.mul(b,fill_value = 0) #a*b,其中缺少的元素用0补齐
#不同维度间运算(为广播运算,一维Series默认在轴1参与运算)
import pandas as pd
import numpy as np
b = pd.DataFrame(np.arange(20).reshape(4,5))
c = pd.Series(np.arange(4))
c - 10
b - c
b.sub(c,axis=0) #指定0轴参与运算:使用运算方法可以令一维Series参与运算
比较运算法则
import pandas as pd
import numpy as np
#同维度运算尺寸一致
a = pd.DataFrame(np.arange(12).reshape(3,4))
d = pd.DataFrame(np.arange(12,0,-1).reshape(3,4))
a > d
a == d
#不同维度,广播运算,默认在1轴
a = pd.DataFrame(np.arange(12).reshape(3,4))
c = pd.Series(np.arange(4))
a > c
c > 0
[!] 遇到的问题:index must be monotonic increasing or decreasing
错误代码:(版本不同所以报错)
nd = d.reindex(index=ni,columns=nc,method='ffill')
更正后代码:
nd = d.reindex(index=ni,columns=nc).ffill()
参考:https://blog.csdn.net/mr_muli/article/details/83962897