利用python进行数据分析-pandas入门
2016-06-07 14:01
876 查看
1.pandas的数据结构介绍
a.Series
Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签(即索引)组成。
obj=Series([4,7,-5,3])
print obj
结果为:
0 4
1 7
2 -5
3 3
dtype: int64
可以通过Series的values和index属性获取其数组表示形式和索引对象
print obj.values
print obj.index
结果为:
[ 4 7 -5 3]
Int64Index([0, 1, 2, 3], dtype='int64')
通常,我们希望所创建的Series带有一个可以对各个数据点进行标记的索引:
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
print obj2
结果为:
d 4
b 7
a -5
c 3
dtype: int64
与普通Numpy数组相比,你可以通过索引的方式选取Series中的单个或一组值
print obj2['d']
obj2['c']=10
print obj2[['a','c']]
结果为:
4
a -5
c 10
dtype: int64
numpy数组运算都会保留索引和值之间的链接
print obj2[obj2>0]
print obj2*2
结果为:
d 4
b 7
c 10
dtype: int64
d 8
b 14
a -10
c 20
dtype: int64
还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射
print 'b' in obj2
print 'e' in obj2
结果为:
True
False
如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series
sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
print obj3
结果为:
Ohio 35000
Oregon 16000
Texas 71000
Utah 5000
dtype: int64
如果传入一个字典,则结果Series中的索引就是原字典的键(有序排序)
states=['California','Ohio','Oregon','Texas']
obj4=Series(sdata,index=states)
print obj4
结果为:
California NaN
Ohio 35000
Oregon 16000
Texas 71000
dtype: float64
pandas的isnull和notnull的函数可用于检测缺失数据
print pd.isnull(obj4)
print pd.notnull(obj4)
结果为:
California True
Ohio False
Oregon False
Texas False
dtype: bool
California False
Ohio True
Oregon True
Texas True
dtype: bool
Series也有类似的实例方法
print obj4.isnull()
结果为:
California True
Ohio False
Oregon False
Texas False
dtype: bool
对于许多应用而言,Series最重要的一个功能:它在算术运算中会自动对齐不同索引的数据
print obj3
print obj4
print obj3+obj4
结果为:
Ohio 35000
Oregon 16000
Texas 71000
Utah 5000
dtype: int64
California NaN
Ohio 35000
Oregon 16000
Texas 71000
dtype: float64
California NaN
Ohio 70000
Oregon 32000
Texas 142000
Utah NaN
dtype: float64
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切
obj4.name='population'
obj4.index.name='state'
print obj4
结果为:
state
California NaN
Ohio 35000
Oregon 16000
Texas 71000
Name: population, dtype: float64
Series的索引可以通过赋值的方式就地修改:
obj.index=['zhuheng','xiaoyang','heng','zhu']
print obj
结果为:
zhuheng 4
xiaoyang 7
heng -5
zhu 3
dtype: int64
2.DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。DataFrame既有行索引也有列索引,它可以看做由Series组成的字典(共用同一个索引)
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)
print frame
结果为:
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
如果指定了顺序列,则DataFrame的列就会按照指定顺序进行排列
print DataFrame(data,columns=['year','state','pop'])
结果为:
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
跟Series一样,如果传入的列在数据中找不到,就会产生NA值
frame2=DataFrame(data,columns=['year','state','pop','debt'],
index=['one','two','three','four','five'])
print frame2
结果为:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
通过类似字典标记的方式或者属性的方式,可以将DataFrame的列获取为一个Series
print frame2['year']
print frame2.state
结果为:
one 2000
two 2001
three 2002
four 2001
five 2002
Name: year, dtype: int64
one Ohio
two Ohio
three Ohio
four Nevada
five Nevada
Name: state, dtype: object
注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经相应的设置好了。行也可以通过位置或名称的方式进行获取,比如用索引字段ix
print frame2.ix['three']
结果为:
year 2002
state Ohio
pop 3.6
debt NaN
Name: three, dtype: object
列可以通过赋值的方式进行修改
frame2['debt']=np.arange(5)
print frame2
结果为:
year state pop debt
one 2000 Ohio 1.5 0
two 2001 Ohio 1.7 1
three 2002 Ohio 3.6 2
four 2001 Nevada 2.4 3
five 2002 Nevada 2.9 4
如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值
val=Series(['-1.2','-1.5','-1.7'],index=['two','four','five'])
frame2['debt']=val
print frame2
结果为:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 -1.2
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 -1.5
five 2002 Nevada 2.9 -1.7
为不存在的列赋值会创建一个新列,关键字del用于删除列
frame2['eastern']=frame2.state=='Ohio'
print frame2
del frame2['eastern']
结果为:
year state pop debt eastern
one 2000 Ohio 1.5 NaN True
two 2001 Ohio 1.7 -1.2 True
three 2002 Ohio 3.6 NaN True
four 2001 Nevada 2.4 -1.5 False
five 2002 Nevada 2.9 -1.7 False
另一种常见的数据形式是嵌套字典
pop={'Nevada':{2001:2.4,2002:2.9},
'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame3=DataFrame(pop)
print frame3
结果为:
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
可以对该结果进行转置
print frame3.T
结果为:
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6
内层字典的键会被合并、排序以形成最终的索引。如果显式指定了索引,则不会这样
print DataFrame(pop,index=[2001,2002,2003])
结果为:
Nevada Ohio
2001 2.4 1.7
2002 2.9 3.6
2003 NaN NaN
由Series组成的字典差不多也是一样的用法
pdata={'Ohio':frame3['Ohio'][:-1],
'Nevada':frame3['Nevada'][:2]}
print DataFrame(pdata)
结果为:
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
如果设置了DataFrame的index和columns的name属性,则这些信息也会被显式出来
frame3.index.name='year'
frame3.columns.name='state'
print frame3
结果为:
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据
print frame3.values
结果为:
[[ nan 1.5]
[ 2.4 1.7]
[ 2.9 3.6]]
a.Series
Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签(即索引)组成。
obj=Series([4,7,-5,3])
print obj
结果为:
0 4
1 7
2 -5
3 3
dtype: int64
可以通过Series的values和index属性获取其数组表示形式和索引对象
print obj.values
print obj.index
结果为:
[ 4 7 -5 3]
Int64Index([0, 1, 2, 3], dtype='int64')
通常,我们希望所创建的Series带有一个可以对各个数据点进行标记的索引:
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
print obj2
结果为:
d 4
b 7
a -5
c 3
dtype: int64
与普通Numpy数组相比,你可以通过索引的方式选取Series中的单个或一组值
print obj2['d']
obj2['c']=10
print obj2[['a','c']]
结果为:
4
a -5
c 10
dtype: int64
numpy数组运算都会保留索引和值之间的链接
print obj2[obj2>0]
print obj2*2
结果为:
d 4
b 7
c 10
dtype: int64
d 8
b 14
a -10
c 20
dtype: int64
还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射
print 'b' in obj2
print 'e' in obj2
结果为:
True
False
如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series
sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
print obj3
结果为:
Ohio 35000
Oregon 16000
Texas 71000
Utah 5000
dtype: int64
如果传入一个字典,则结果Series中的索引就是原字典的键(有序排序)
states=['California','Ohio','Oregon','Texas']
obj4=Series(sdata,index=states)
print obj4
结果为:
California NaN
Ohio 35000
Oregon 16000
Texas 71000
dtype: float64
pandas的isnull和notnull的函数可用于检测缺失数据
print pd.isnull(obj4)
print pd.notnull(obj4)
结果为:
California True
Ohio False
Oregon False
Texas False
dtype: bool
California False
Ohio True
Oregon True
Texas True
dtype: bool
Series也有类似的实例方法
print obj4.isnull()
结果为:
California True
Ohio False
Oregon False
Texas False
dtype: bool
对于许多应用而言,Series最重要的一个功能:它在算术运算中会自动对齐不同索引的数据
print obj3
print obj4
print obj3+obj4
结果为:
Ohio 35000
Oregon 16000
Texas 71000
Utah 5000
dtype: int64
California NaN
Ohio 35000
Oregon 16000
Texas 71000
dtype: float64
California NaN
Ohio 70000
Oregon 32000
Texas 142000
Utah NaN
dtype: float64
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切
obj4.name='population'
obj4.index.name='state'
print obj4
结果为:
state
California NaN
Ohio 35000
Oregon 16000
Texas 71000
Name: population, dtype: float64
Series的索引可以通过赋值的方式就地修改:
obj.index=['zhuheng','xiaoyang','heng','zhu']
print obj
结果为:
zhuheng 4
xiaoyang 7
heng -5
zhu 3
dtype: int64
2.DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。DataFrame既有行索引也有列索引,它可以看做由Series组成的字典(共用同一个索引)
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)
print frame
结果为:
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
如果指定了顺序列,则DataFrame的列就会按照指定顺序进行排列
print DataFrame(data,columns=['year','state','pop'])
结果为:
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
跟Series一样,如果传入的列在数据中找不到,就会产生NA值
frame2=DataFrame(data,columns=['year','state','pop','debt'],
index=['one','two','three','four','five'])
print frame2
结果为:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
通过类似字典标记的方式或者属性的方式,可以将DataFrame的列获取为一个Series
print frame2['year']
print frame2.state
结果为:
one 2000
two 2001
three 2002
four 2001
five 2002
Name: year, dtype: int64
one Ohio
two Ohio
three Ohio
four Nevada
five Nevada
Name: state, dtype: object
注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经相应的设置好了。行也可以通过位置或名称的方式进行获取,比如用索引字段ix
print frame2.ix['three']
结果为:
year 2002
state Ohio
pop 3.6
debt NaN
Name: three, dtype: object
列可以通过赋值的方式进行修改
frame2['debt']=np.arange(5)
print frame2
结果为:
year state pop debt
one 2000 Ohio 1.5 0
two 2001 Ohio 1.7 1
three 2002 Ohio 3.6 2
four 2001 Nevada 2.4 3
five 2002 Nevada 2.9 4
如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值
val=Series(['-1.2','-1.5','-1.7'],index=['two','four','five'])
frame2['debt']=val
print frame2
结果为:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 -1.2
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 -1.5
five 2002 Nevada 2.9 -1.7
为不存在的列赋值会创建一个新列,关键字del用于删除列
frame2['eastern']=frame2.state=='Ohio'
print frame2
del frame2['eastern']
结果为:
year state pop debt eastern
one 2000 Ohio 1.5 NaN True
two 2001 Ohio 1.7 -1.2 True
three 2002 Ohio 3.6 NaN True
four 2001 Nevada 2.4 -1.5 False
five 2002 Nevada 2.9 -1.7 False
另一种常见的数据形式是嵌套字典
pop={'Nevada':{2001:2.4,2002:2.9},
'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame3=DataFrame(pop)
print frame3
结果为:
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
可以对该结果进行转置
print frame3.T
结果为:
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6
内层字典的键会被合并、排序以形成最终的索引。如果显式指定了索引,则不会这样
print DataFrame(pop,index=[2001,2002,2003])
结果为:
Nevada Ohio
2001 2.4 1.7
2002 2.9 3.6
2003 NaN NaN
由Series组成的字典差不多也是一样的用法
pdata={'Ohio':frame3['Ohio'][:-1],
'Nevada':frame3['Nevada'][:2]}
print DataFrame(pdata)
结果为:
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
如果设置了DataFrame的index和columns的name属性,则这些信息也会被显式出来
frame3.index.name='year'
frame3.columns.name='state'
print frame3
结果为:
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据
print frame3.values
结果为:
[[ nan 1.5]
[ 2.4 1.7]
[ 2.9 3.6]]
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法