【Pandas】pandas的主要数据结构
1. pandas入门篇
pandas是数据分析领域的常用库,它被专门设计来处理表格和混杂数据,这样的设计让它在数据清洗和分析工作上更有优势。
1. pandas数据结构
pandas的数据结构主要为:
Series和DataFrame
1.1 Series
Series类似一维数组,它由一组数据和一组与之相关的数据标签组成。Series的表现形式为索引在左值在右。没有制定索引时,自动创建一个0到N-1(N:数据长度)的整数型索引。
创建方法
#pd.Series创建一个Seies
obj = pd.Series([4,7,-5,3])
Out:
0 4
1 7
2 -5
3 3
dtype: int64
使用字典创建Series
#创建的Series的索引就是字典的键。
In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
sdata = pd.Series(data)
#改变键的位置来传入可以改变Series的顺序。
#当输入的索引找不到对应值时,结果为NaH。
In[2]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)
Out[1]:
a 4
b 7
c -5
d 4
dtype: int64
Out[2]:
d 4.0
c -5.0
a 4.0
e NaN
dtype: float64
自定义索引
obj = pd.Series([4,7,-5,4],index = ['a','b','c','d'])
Out:
a 4
b 7
c -5
d 4
dtype: int64
通过操作index属性,同样可以获取索引
obj.index
Out:
Index(['a', 'b', 'c', 'd'], dtype='object')
对Series进行运算
使用NumPy函数或类似NumPy的运算都会保留索引。
In[1]:obj[obj>0] #布尔过滤
Out[1]:
a 4
b 7
d 4
dtype: int64
In[2]:obj*2
Out[2]:
a 8
b 14
c -10
d 8
dtype: int64
In[3]:np.exp(obj)
Out[3]:
a 54.598150
b 1096.633158
c 0.006738
d 54.598150
dtype: float64
检测缺失数据
pandas的isnull和notnull可用于检测缺失数据。
In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)
pd.isnull(sdata)
In[2]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)
pd.notnull(sdata)
Out[1]:
d False
c False
a False
e True
dtype: bool
Out[2]:
d True
c True
a True
e False
dtype: bool
Series的自动对齐属性
将两个Series相加,Series会根据运算的索引标签自动对齐数据。
In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)
print(sdata)
sdata2 = pd.Series(data)
print(sdata2)
Out[1]:
stdata:
d 4.0
c -5.0
a 4.0
e NaN
dtype: float64
sdata2:
a 4
b 7
c -5
d 4
dtype: int64
In[2]:
sdata+sdata2
Out[2]:
a 8.0
b NaN
c -10.0
d 8.0
e NaN
dtype: float64
Series的name属性
In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)
sdata.name = 'pandas'
sdata.index.name = 'index'
Out[1]:
index
d 4.0
c -5.0
a 4.0
e NaN
Name: pandas, dtype: float64
1.2 DataFrame
DataFrome是一个表格型的数据结构。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多 个二维块存放的(而不是列表、字典或别的一维数据结构)。
创建DataFrame
字典创建
最常用的方法时直接传入一个由等长列表或NumPy数组组成的字典。
In[1]:
data={
'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]
}
Frame = pd.DataFrame(data)
Out[1]:
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
5 3.2 Nevada 2003
由结果可以看出,DataFrame自动加上了一个有序排列作为索引。
对于数据量庞大的DataFrame,head方法会选取前五行。
In[1]:
frame.head()
Out[1]:
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
与Series相似,改变字典键的顺序,同样会改变列的顺序。
In[1]:
Frame = pd.DataFrame(data,columns=['year','state','pop'])
Out[1]:
year state pop
0 2000 Ohio 1.5
1 2001 Ohio 1.7
2 2002 Ohio 3.6
3 2001 Nevada 2.4
4 2002 Nevada 2.9
5 2003 Nevada 3.2
与Series相似,传入的值找不到时,也会被标记为Nah。
字典嵌套创建
嵌套字典传给DataFrame时,外层字典的键作为列,内层键作为行索引
In[1]:
pop =
{'Nevada':{2001:2.4,2002:2.9},
....:'Ohio': {2000:1.5,2001: 1.7,2002:3.6}}
Out[1]:
Nevada ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
操作DataFrame
通过类似字典的方式,可以将DataFrame的列获取为一个Series。返回的Series有着与DtaFrame相同的索引且其name属性为列索引。
In[1]:
Frame['state']
Out[1]:
0 Ohio
1 Ohio
2 Ohio
3 Nevada
4 Nevada
5 Nevada
Name: state, dtype: object
列可以通过赋值的方法进行修改。注意:将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度匹配;将Series赋值给一个列时,会精确匹配DataFrame的索引,空位将被用NaH替代。
In[1]:
#也可以用类似的方法进行添加列
Frame['pop'] = np.arange(6)
Out[1]:
year state pop
0 2000 Ohio 0
1 2001 Ohio 1
2 2002 Ohio 2
3 2001 Nevada 3
4 2002 Nevada 4
5 2003 Nevada 5
关键字del可以被用来删除列。
In[1]:
del Frame['pop']
Out[1]:
year state
0 2000 Ohio
1 2001 Ohio
2 2002 Ohio
3 2001 Nevada
4 2002 Nevada
5 2003 Nevada
DataFrame构造器能接收的数据
- 区块链技术,如何提升网络安全?
- 趣店推“大白汽车”业务 启用域名dabaiqiche.com
- 糖果吃了那么多,你真的知道比特币分叉是咋回事吗?
- 静息态网络拓扑传输认知任务信息
- MYSQL字符串截取总结:LEFT、RIGHT、SUBSTRING、SUBSTRING
- 如何用Python提取中文关键词?
- 工信部:将加大网络提速降费力度加快百兆宽带普及
- 人工智能AI(5):线性代数之矩阵、线性空间
- iOS开发进阶篇——FRP与ReactiveCocoa的介绍(一)
- 英伟达修改GeForce软件使用条款:禁止在数据中心运行深度学习等应用
- 浅谈几种SLB技术的实现
- 史上最逼真人形机器人堪比健身教练,技能满满还会流汗
- 被监管前的疏忽?互联网金融大面积逾期,中介行为不容忽视
- 达尔文漏算的一步却让它填补,科学家认为人类最初认可的进化论不再适用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java自动化测试(接口鉴权 16)
- Android:Tools命名空间原来是有大用处的
- Android:无线调试就是这么简单
- Java自动化测试(回写与断言 17)
- 一篇就够——Kotlin快速入门
- 微信大牛教你深入了解数据库索引
- SqlServer 资源消耗查询
- Android:检查通知权限并跳转到通知设置界面
- OpenShift应用发布和运维设计
- Android:依赖Module的问题汇总
- Android:加载网图时精确获取图片格式
- Android:8.0中未知来源安装权限变更
- Android:RippleDrawable 水波纹/涟漪效果
- Android:Chip、ChipGroups、ChipDrawable
- Android9.0 使用 AndroidVideoCache 时不能缓存/播放视频的解决