pandas是一个专门用于数据分析的开源Python库,目前很多使用Python分析数据的专业人员都将pandas作为基础工具来使用。pandas是以Numpy作为基础来设计开发的,Numpy是大量Python数据科学计算库的基础,pandas以此为基础,在计算方面具有很高的性能。pandas有两大数据结构,这是pandas的核心,数据分析的所有任务都离开它们,分别是Series和DataFrame。
 
paandas安装较为简单,如果使用Anaconda的话,就在终端输入命令 “conda install pandas” 就能安装;如果电脑安装了pip的话,就在终端输入命令 “pip install pandas” 就能安装成功。安装完成后,可以在终端输入 “import pandas as pd” ,测试pandas是否安装成功。
 
Series用来表示一维数据结构,跟数组类似,它由两个相关联的数组组成,其中一个叫index的数组用来存储标签,这些标签与另一个数组中的元素一一对应。如下图所示:

声明Series对象时,需要调用Series()构造函数,并传入一个数组作为Series的主数组,比如:
  1. import pandas as pd
  2. ser=pd.Series([12,33,55,66])
  3. print(ser)
  4. '''输出为
  5. 0 12
  6. 1 33
  7. 2 55
  8. 3 66
  9. dtype: int64
  10. '''

运行上面的代码,可以知道,如果不指定标签,那么默认标签就是从0开始递增,我们也可以在声明一个Series对象时给它指定标签:

  1. import pandas as pd
  2. ser=pd.Series([12,33,55,66],index=['a','s','d','f'])
  3. print(ser)
  4. '''输出为:
  5. a 12
  6. s 33
  7. d 55
  8. f 66
  9. dtype: int64
  10. '''
我们可以通过Series的index很方便得到其内部元素,或者为某元素赋值:

  1. import pandas as pd
  2. ser=pd.Series([12,33,55,66])
  3. print(ser[2])
  4. ser[2]=99
  5. print(ser[2])
  6. '''输出为:
  7. 55
  8. 99
  9. '''
Series对象可以进行运算,比如加减乘除,也可以使用Numpy中的数学函数来对它进行计算:

  1. import pandas as pd
  2. ser=pd.Series([12,33,55,66])
  3. ser2=ser/2
  4. print(ser2)
  5. import numpy as np
  6. print(np.log(ser))
  7. '''输出为:
  8. 0 6.0
  9. 1 16.5
  10. 2 27.5
  11. 3 33.0
  12. dtype: float64
  13. 0 2.484907
  14. 1 3.496508
  15. 2 4.007333
  16. 3 4.189655
  17. dtype: float64
  18. '''
从上面可以看出,Series对象似乎跟字典很相似,我们可以把Series对象当作字典来使用,我们在创建Series对象时,将创建好的字典传入Series的构造函数即可,这样字典的键就组成了索引数组,每个索引对应的元素就是字典中对应的值:

  1. import pandas as pd
  2. dic={'wife':'kathy','son':'mary','mother':'lily','father':'tom'}
  3. ser=pd.Series(dic)
  4. print(ser)
  5. '''输出为:
  6. wife kathy
  7. son mary
  8. mother lily
  9. father tom
  10. dtype: object
  11. '''
DataFrame这种数据结构针对的是多维数据,由按一定顺序排列的多列数据组成,列之间的数据类型会不同,如下图所示:

从图中可以看出,DataFrame对象有两个索引数组,第一个数组index与行相关,这与Series相似,每个index标签与所在行的所有元素相关联。它的第二个数组包含一系列标签,每个标签下包含一列数据。可以将DataFrame理解为由多个Series对象组成的字典,每一列的名称为字典的键,Series作为字典的值。
创建DataFrame对象的常用方法就是传递一个字典对象给DataFrame()构造函数:

  1. import pandas as pd
  2. dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
  3. frame=pd.DataFrame(dic)
  4. print(frame)
  5. '''输出为:
  6. name age sex
  7. 0 tom 14 男
  8. 1 mary 15 男
  9. 2 john 77 女
  10. 3 mike 45 男
  11. '''
跟Series对象类似。DataFrame如果没有明确指定标签,那么它的默认标签也是从0开始递增。如果我们想知道DataFrame对象所有列的名称,则调用columns属性就可以了,获取索引列表的话就调用index属性,调用values属性将获取所有的元素。可以给DateFrame对象添加列:

  1. import pandas as pd
  2. dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
  3. frame=pd.DataFrame(dic)
  4. frame['weight']=[89,99,145,123]
  5. print(frame)
  6. '''输出为:
  7. name age sex weight
  8. 0 tom 14 男 89
  9. 1 mary 15 男 99
  10. 2 john 77 女 145
  11. 3 mike 45 男 123
  12. '''
在数据处理中,有有时也会用到DataFrame的转置操作,即把行变为列,列变为行,调用DataFrame的T属性即可完成转置:

  1. import pandas as pd
  2. dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
  3. frame=pd.DataFrame(dic)
  4. print(frame.T)
  5. '''输出为:
  6. 0 1 2 3
  7. name tom mary john mike
  8. age 14 15 77 45
  9. sex 男 男 女 男
  10. '''
pandas允许Series对象与DataFrame对象进行运算,定义Series和DataFrame对象时,把Series对象的索引和DataFrame的列名称保持一致:

  1. import pandas as pd
  2. import numpy as np
  3. frame=pd.DataFrame(np.arange(16).reshape((4,4)),index=['age','name','sex','weight'],columns=['john','tom','mary','cathy'])
  4. print(frame)
  5. ser=pd.Series(np.arange(4),index=['john','tom','mary','cathy'])
  6. print(ser)
  7. res=frame-ser
  8. print(res)
  9. '''输出为:
  10. john tom mary cathy
  11. age 0 1 2 3
  12. name 4 5 6 7
  13. sex 8 9 10 11
  14. weight 12 13 14 15
  15. john 0
  16. tom 1
  17. mary 2
  18. cathy 3
  19. dtype: int32
  20. john tom mary cathy
  21. age 0 0 0 0
  22. name 4 4 4 4
  23. sex 8 8 8 8
  24. weight 12 12 12 12
  25. '''
可以看出,DataFrame对象的各元素分别减去了Series对象中索引与之相同的元素,DataFrame对象每一列的所有元素都执行了减法操作。

版权声明:本文为IAMTOM原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/IAMTOM/p/10216337.html