目录
Pandas简介
Pandas理解
Series类型
(一)创建:
(二)基本操作
DataFrame类型
(一)DataFrame基本概念
(二)DataFrame类型创建
(三)数据类型操作
(1)重新索引:.reindex()
(2)索引类型及其常用方法
(3) 删除指定索引对象
(四)数据类型运算
(1)算数运算法则
(2)比较运算法则
提供高性能易用数据类型和分析工具的第三方库。
引用:import pandas as pd
基于NumPy实现,常与NumPy和Matplotlib一同使用。
两个数据类型:Series(一维)、DataFrame(二维及以上)
基于上述数据类型的各类操作:基本操作、运算操作、特征类操作、关联类操作
NumPy | Pandas |
基础数据类型 | 扩展数据类型 |
关注数据的结构表达(数据之间构成的维度,通过什么维度将一组数据存储和表达) 维度:数据间的关系 |
关注数据的应用表达(在使用数据时,如何更有效地提前并运用数据,过度的维度关系不利于数据的实际运用) 数据与索引之间的关系 (无论是series还是dataframe都支持有效的索引) |
由一组数据和与之相关的数据索引组成
import pandas as pd
import numpy as np
#从标量创建,必须指定索引
a = pd.Series(25, index = ['a', 'b', 'c'])
print(a)
#从字典创建01
d1 = pd.Series({'a':9, 'b':8, 'c':7})
print(d1)
#从字典创建02:由index指定series结构,并从字典中选取相应值的过程,若无对应值,值NaN
d2 = pd.Series({'a': 9, 'b': 8, 'c': 7}, index=['c', 'a', 'b', 'd'])
print(d2)
#从ndarray创建,若不指定index,默认0始数字
n = pd.Series(np.arange(5), index=np.arange(9, 4, -1))
print(n)
Series类型包括index和values两部分
Series类型的操作类型类似ndarray类型
Series类型的操作类型类似python字典类型
Series类型对齐操作
Series类型的name属性:series.name、series.index.name
Series类型的修改:Series对象可以随时修改并立刻生效
import pandas as pd
import numpy as np
#从二维ndarray对象创建, 自动生成行、列索引,都是零开始的整数
d = pd.DataFrame(np.arange(10).reshape(2, 5))
print(d)
#从一维ndarray对象字典创建,字典中的键默认为自定义的列索引,且索引自动对齐
dt = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two': pd.Series([9, 8, 7, 6], index=['a', 'b', 'c', 'd'])}
d2 = pd.DataFrame(dt)
print(d2)
#选取列的时候若列不存在,会补为空列
pd.DataFrame(dt, index=['b', 'c', 'd'], columns=['two', 'three'])
#从列表类型的字典创建
dl = {'one': [1, 2, 3, 4], 'two': [9, 8, 7, 6]}
d3 = pd.DataFrame(dl, index=['a', 'b', 'c', 'd'])
print(d3)
import pandas as pd
import numpy as np
d1 = {'城市': ['北京', '上海', '广州', '深圳', '沈阳'],
'环比': [101.5, 101.2, 101.3, 102.0, 100.1],
'同比': [101.5, 101.2, 101.3, 102.0, 100.1],
'定基': [101.5, 101.2, 101.3, 102.0, 100.1]}
d3 = pd.DataFrame(d1, index=['c1', 'c2', 'c3', 'c4', 'c5'])
print(d3) #列顺序不一定和字典中一致
print(d3.index) #行索引
print(d3.columns)#列索引
print(d3.values)#值
print(d3['同比'])#指定列
print(d3.loc['c2'])#指定行
print(d3['同比']['c2'])#定位
d3 = d3.reindex(index=['c5', 'c4', 'c3', 'c2', 'c1'])
d3 = d3.reindex(columns=['城市', '同比', '环比', '定基'])
print(d3)
#reindex中其他参数
#fill_value:重新索引中,用于填充缺失位置索引的值
#method:填充方法,ffill表示当前值向前填充、bfill向后填充
#limit:最大填充量
#copy:默认true,生成新的对象,False时,新旧相等不复制
newc = d3.columns.insert(4, "新增")
newd = d3.reindex(columns=newc, fill_value=200 )
print(newd)
index对象是不可修改的,可以通过索引修改数据
nc = d3.columns.delete(2)
ni = d3.index.insert(5, 'c0')
nd = d3.reindex(index=ni, columns=nc, method='ffill')
print(nd)
d3 = d3.drop('c5') #drop默认操作零轴上的元素
d3 = d3.drop('同比', axis=1)
print(d3)
import numpy as np
import pandas as pd
a = pd.DataFrame(np.arange(12).reshape(3,4))
b = pd.DataFrame(np.arange(20).reshape(4,5))
print(a+b)#标签相同的行进行运算,标签不同的补齐后进行运算
#或者使用方法形式运算,优点在于可以设置一些参数
b.add(a, fill_value = 100)
print(b)
a.mul(b, fill_value = 0)
print(a)
#不同维度的运算,广播运算
c = pd.Series(np.arange(4))
print(c)
print(c-10)#每个元素与零维操作即可
print(b-c)#默认发生在1轴
#如果希望发生在零轴上,即b中每一列都减去c的每一列的对应元素,则需要指定零轴参与运算
b.sub(c, axis=0)
print(b)
比较运算法则只能比较相同索引的元素,不进行补齐
二维和一维,一维和零维间为广播运算
采用>、<、>=、<=、==、!=等符号进行的二元运算产生布尔对象
import numpy as np
import pandas as pd
#在同一维度运算,要求ab尺寸一致,若不同则会报错
a = pd.DataFrame(np.arange(12).reshape(3, 4))
b = pd.DataFrame(np.arange(12, 0, -1).reshape(3, 4))
print(a)
print(b)
print(a>b)
#不同维度,广播运算,默认在1轴.a的每一行都与c比较
c = pd.Series(np.arange(4))
print(c)
print(a>c)
print(c>5)