pandas入门练习-数据结构
来源:互联网 发布:数据库安全性认识 编辑:程序博客网 时间:2024/06/05 11:13
pandas 是python的一个数据分析包,是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。提供了高效地操作大型数据集所需的工具,使得数据分析工作变着简单高效。
pandas数据结构介绍
Series是一种类似于一维数组的对象,它由一维组数(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series
from pandas import Series,DataFrameimport pandas as pdimport numpy as npobj=Series([4,7,-5,3])obj
0 41 72 -53 3dtype: int64
Series的字符串表现形式是:索引在左边,值在右边,由于没有为数据指定索引,就会自动创建一个0到N-1的整数型索引。可以通过Series的values和index属性获取其数组表示形式和索引对象。
obj.values
array([ 4, 7, -5, 3], dtype=int64)
obj.index
RangeIndex(start=0, stop=4, step=1)
我们希望创建的Series带有一个可以对各个数据点进行标记的索引obj2=Series([4,7,-5,3],index=['d','b','a','c'])obj2
d 4 b 7 a -5 c 3 dtype: int64
obj2.index
Index(['d', 'b', 'a', 'c'], dtype='object')
通过索引的方式选取Series中的一个或者一组值obj2['a']
-5
obj2['d']=6obj2[['c','a','d']]
c 3 a -5 d 6 dtype: int64
Numpy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的连接。obj2
d 6 b 7 a -5 c 3 dtype: int64
obj2[obj2>0]
d 6 b 7 c 3 dtype: int64
obj2*2
d 12 b 14 a -10 c 6 dtype: int64
np.exp(obj2)
d 403.428793 b 1096.633158 a 0.006738 c 20.085537 dtype: float64
可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。可以用在许多原本需要字典参数的函数中。'b' in obj2
True
'k' in obj2
False
如果数据被存放在一个python字典中,通过这个字典来创建Seriessdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}obj3=Series(sdata)obj3
Ohio 35000 Oregon 16000 Texas 71000 Utah 5000 dtype: int64
states=['California','Ohio','Oregon','Texas']obj4=Series(sdata,index=states)obj4
California NaN Ohio 35000.0 Oregon 16000.0 Texas 71000.0 dtype: float64
pandas的isnull和notnull函数可用于检测缺失数据pd.isnull(obj4)
California True Ohio False Oregon False Texas False dtype: bool
pd.notnull(obj4)
California False Ohio True Oregon True Texas True dtype: bool
obj4.isnull()
California True Ohio False Oregon False Texas False dtype: bool
在算术运算中会自动对齐不同索引的数据obj3
Ohio 35000 Oregon 16000 Texas 71000 Utah 5000 dtype: int64
obj4
California NaN Ohio 35000.0 Oregon 16000.0 Texas 71000.0 dtype: float64
obj3+obj4
California NaN Ohio 70000.0 Oregon 32000.0 Texas 142000.0 Utah NaN dtype: float64
Series对象本身及其索引都有一个name属性,该属性跟padans其他的关键功能关系很密切obj4.name='population'obj4.index.name='state'obj4
state California NaN Ohio 35000.0 Oregon 16000.0 Texas 71000.0 Name: population, dtype: float64
Series的索引可通过赋值的方式修改obj.index=['Bob','Steve','Jeff','Ryan']obj
Bob 4 Steve 7 Jeff -5 Ryan 3 dtype: int64
###DataFrame表格型数据结构DataFrame含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),有行索引也有列索引,可以看作是由Series组成的字典(共同用一个索引)。DataFrame中面向行和面向列的基本操作是平衡的。DataFrame中的数据是以一个或多个二维存放的(而不是列表、字典或别的一维数据结构)构建DataFrame的办法很多种,最常用的一种是传入一个由等长列表或者Numpy数组组成的字典。data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'], 'year':[2000,2001,2002,2001,2002], 'pop':[1.5,1.7,3.6,2.4,2.9]}frame=DataFrame(data)frame
结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列。
DataFrame的列会按照指定的列序指定顺序进行排列
DataFrame(data,columns=['year','state','pop'])
和Series同样,如果传入的列在数据中找不到,会产生NA值
frame2=DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five'])frame2
frame2['state']
one Ohio two Ohio three Ohio four Nevada five Nevada Name: state, dtype: object
frame2.year
one 2000 two 2001 three 2002 four 2001 five 2002 Name: year, dtype: int64
frame2.ix['three']
year 2002 state Ohio pop 3.6 debt NaN Name: three, dtype: object
列可以通过赋值的方式修改frame2['debt']=16.5frame2
frame2['debt']=np.arange(5.)frame2
将数组或者列表赋值给某个列时,其长度需要跟DataFrame的长度相匹配,如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都会填写上缺失值。
val=Series([-1.2,-1.5,-1.7],index=['two','four','five'])frame2['debt']=valframe2
为不存在的列赋值会创建一个新列,关键字del用于删除列
frame2['eastern']=frame2.state=='Ohio'frame2
del frame2['eastern']
frame2.columns
Index(['year', 'state', 'pop', 'debt'], dtype='object')
嵌套字典,外层字典的键作为列,内层键作为行索引pop={'Nevada':{2001:2.4,2002:2.9}, ....:'Ohio':{2000:1.5,2001:107,2002:3.6}}frame3=DataFrame(pop)
frame3
对结果进行转置
frame3.T
内层的字典键会被合并、排序以形成最终的索引。如果显示指定了索引,则不会这样
DataFrame(pop,index=[2001,2002,2003])
pdata={'Ohio':frame3['Ohio'][:-1],'Nevada':frame3['Nevada'][:2]}
DataFrame(pdata)
下表列出了DataFrame构造函数所能接受的各种数据
如果设置了DataFrame的index和columns的name属性,则这些信息也会被显示出来
frame3.index.name='year';frame3.columns.name='state'
frame3
跟Series一样,values属性也会以二维ndarry的形式返回DataFrame中的数据
frame3.values
array([[ nan, 1.5], [ 2.4, 107. ], [ 2.9, 3.6]])
如果DataFrame各列的数据类型不同,则值数组的数据类型就会选用能兼容所有列的数frame2.values
array([[2000, 'Ohio', 1.5, nan], [2001, 'Ohio', 1.7, -1.2], [2002, 'Ohio', 3.6, nan], [2001, 'Nevada', 2.4, -1.5], [2002, 'Nevada', 2.9, -1.7]], dtype=object)
索引对象:padas对象负责管理轴标签和其他元数据(比如轴名称等)。 构建Series和DataFrame时,所用到的任何数组或其他序列的标签会被转换成一个indexobj=Series(range(3),index=['a','b','c'])
index=obj.index
index
Index(['a', 'b', 'c'], dtype='object')
index[1:]
Index(['b', 'c'], dtype='object')
index对象是不可以修改的(immutable),因此用户不能对其进行修改index[1]='d'
————————————————————————— TypeError Traceback (most recent call last) <ipython-input-49-8be6e68dba2d> in <module>() ----> 1 index[1]='d' e:\python\lib\site-packages\pandas\core\indexes\base.py in __setitem__(self, key, value) 1722 1723 def __setitem__(self, key, value): -> 1724 raise TypeError("Index does not support mutable operations") 1725 1726 def __getitem__(self, key): TypeError: Index does not support mutable operations
index不可修改的重要性,这样才能使得index对象在多个数据结构之间安全共享index=pd.Index(np.arange(3))obj2=Series([1.5,-2.5,0],index=index)obj2.index is index
True
下表列出了pandas库内置的index类
frame3
'Ohio' in frame3.columns
True
2003 in frame3.index
False
每个索引都一些方法和属性,可用于设置逻辑并回答有关该索引所包含的数据的常见的问题
- pandas入门练习-数据结构
- pandas入门-数据结构(1)
- pandas入门-数据结构(2)
- 《pandas入门》之基本数据结构
- pandas练习
- pandas练习
- pandas小记:pandas数据结构
- pandas数据结构
- pandas数据结构
- 确定你掌握了pandas?进来看看——python中pandas入门基础练习
- Python数据分析入门(一)-Pandas数据结构(Series)
- pandas入门
- pandas入门
- Pandas入门
- Pandas入门
- pandas入门
- pandas入门
- Pandas 入门
- python 使用免费爬取百度首页 网页 简单案例
- 第四届互联网大会开幕 何小鹏开小鹏汽车上路
- linux0.11内核完全剖析- exit.c
- 计步器优化
- Java之Scanner类中next()和nextLine()的区别
- pandas入门练习-数据结构
- 【java】安装Eclipse报错“ Failed to load the JNI shared library”
- 悟空问答拿10亿元贴补答主,内容创作者如何分到一杯羹?
- python系统编程2:线程
- Linux set命令参数及与env, export的区别
- Spring4.2.4 + Mybatis 3.4.5 整合成web项目
- python自学笔记(4)--Python文件对象、os模块及pickle
- 块匹配算法
- tar包jar包和war包