基于numPy 的一种工具,为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
Python的Anaconda发行版,已经安装好pandas库,不需要另外安装
选择对应的pandas进行勾选安装即可
conda install pandas
pip install pandas
from pandas import Series, DataFrame
import pandas as pd
pandas中主要有两种数据结构,分别是:
一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象
注意:Series中的索引值是可以重复的
jupyter notebook运行代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
arr=np.array([1,3,5,np.NaN,10])
series01=Series(arr)
series01
series01.dtype
series01.index
series01.values
结果:
0 1.0 #通过数组创建Series的时候,如果没有指定索引值,则自动创建0-N的整数索引
1 3.0 #当Series对象创建好后可以通过index修改索引值
2 5.0
3 NaN
4 10.0
dtype: float64
dtype('float64')
RangeIndex(start=0, stop=5, step=1)
array([ 1., 3., 5., nan, 10.])
series02=Series([10,20,30])
series02
series03.index=[u'语文',u'数学',u'英语']
series03
series04=Series(data=[10,20,30],dtype=np.float64,index=[u'语文',u'数学',u'英语'])
series04
结果:
0 10
1 20
2 30
dtype: int64
语文 10.0
数学 20.0
英语 30.0
dtype: float64
语文 10.0
数学 20.0
英语 30.0
dtype: float64
代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
dict1={'王大锤':100,'牛子':60,'李铁钢':90}
#字典中的key成为Series中的索引值,value成为Series中的values
series05=Series(dict1)
print(series05)
print('index:',series05.index)
print('values',series05.values)
print('dtype',series05.dtype)
结果:
王大锤 100
牛子 60
李铁钢 90
dtype: int64
index: Index(['王大锤', '牛子', '李铁钢'], dtype='object')
values [100 60 90]
dtype int64
读取对应索引的数据,有可能返回多条数据
代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
series06=Series(data=[10,20,30],dtype=np.float64,index=[u'语文',u'数学',u'英语'])
print(series06)
print()
print(u"series['语文']",series06[u'语文'])#方括号+索引获取值
结果:
语文 10.0
数学 20.0
英语 30.0
dtype: float64
series['语文'] 10.0
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
series06=Series(data=[10,20,30],dtype=np.float64,index=[u'语文',u'数学',u'英语'])
print(series06)
print()
print("series[0]=",series06[0])#方括号+下标值获取值
print("series[-1]=",series06[-1])
结果:
语文 10.0
数学 20.0
英语 30.0
dtype: float64
series[0]= 10.0
series[-1]= 30.0
类似NumPy中的ndarray的切片操作,通过方括号+下标值/索引值+冒号(:)的形式来截取series对象中的一部分数据。
Series的运算
代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
series06=Series(data=[10,20,30],dtype=np.float64,index=[u'语文',u'数学',u'英语'])
print(series06)
print()
print(series06[1:])#切片获取多个值
print()
print(series06[u'语文':u'数学'])
结果:
语文 10.0
数学 20.0
英语 30.0
dtype: float64
数学 20.0
英语 30.0
dtype: float64
语文 10.0
数学 20.0
dtype: float64
pandas中的isnull和notnull两个函数可以用于在Series中检测缺失值,这两个函数的返回时一个布尔类型的Series
代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
scores=Series({"Tom":100,"Bob":90,"Peter":80})
print(scores)
print()
print(pd.isnull(scores))
print()
print(pd.notnull(scores))
print()
print(scores[pd.isnull(scores)])#过滤出为缺失值的项
print()
print(scores[pd.notnull(scores)])#过滤出不是缺失值的项
print()
结果:
Tom 100
Bob 90
Peter 80
dtype: int64
Tom False
Bob False
Peter False
dtype: bool
Tom True
Bob True
Peter True
dtype: bool
Series([], dtype: int64)
Tom 100
Bob 90
Peter 80
dtype: int64
代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
scores=Series({"Tom":100,"Bob":90,"Peter":80})
print(scores)
print()
new_index=["Tom","Bob","Jone","Peter"]
scores=Series(scores,index=new_index)
print(scores)
结果:(NaN表示一个缺失值或者NA值)
Tom 100
Bob 90
Peter 80
dtype: int64
Tom 100.0
Bob 90.0
Jone NaN
Peter 80.0
dtype: float64
当多个series对象之间进行运算的时候,如果不同series之间具有不同的索引值,那么运算会自动对齐不同索引值的数据,如果某个series没有某个索引值,那么最终结果会赋值为NaN
代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
s1=Series([12,23,45],index=['p1','p2','p3'])
s2=Series([23,42,13],index=['p3','p4','p6'])
print("=====s1+s2=====")
print(s1+s2)
print()
print("=====s1*s2=====")
print(s1*s2)
print()
print("=====s1/s2=====")
print(s1/s2)
结果:
=====s1+s2=====
p1 NaN
p2 NaN
p3 68.0
p4 NaN
p6 NaN
dtype: float64
=====s1*s2=====
p1 NaN
p2 NaN
p3 1035.0
p4 NaN
p6 NaN
dtype: float64
=====s1/s2=====
p1 NaN
p2 NaN
p3 1.956522
p4 NaN
p6 NaN
dtype: float64
Series对象本身以及索引都具有一个name属性,默认为空,根据需要可以进行赋值操作
代码:
import numpy as np
from pandas import Series, DataFrame
import pandas as pd
scores=Series({"Tom":100,"Bob":90,"Peter":80})
scores.name=u'数学' #取名字,Name: 数学
scores.index.name=u'期末考试成绩'#标题
print(scores)
结果:
期末考试成绩
Tom 100
Bob 90
Peter 80
Name: 数学, dtype: int64
可以直接通过列索引获取指定列的数据, eg: df[column_name]
如果需要获取指定行的数据的话,需要通过ix方法来获取对应行索引的行数据,eg: df.ix[index_name]