Pandas 的使用

安装

   pip3 install pandas

导入

  import pandas as pd  # 约定俗成 起别名为 pd

Series

  Series 是一种类似于 一维数组的对象一组数据和一组与之相关的数据标签(索引)组成

  创建:

第一种:
pd.Series([4,5,6,7,8])
执行结果:
0    4
1    5
2    6
3    7
4    8
dtype: int64
# 将数组索引以及数组的值打印出来,索引在左,值在右,由于没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引,
# 取值的时候可以通过索引取值,跟之前学过的数组和列表一样
----------------------------------------------- 第二种: pd.Series([4,5,6,7,8],index=['a','b','c','d','e']) 执行结果: a 4 b 5 c 6 d 7 e 8 dtype: int64 # 自定义索引,index是一个索引列表,里面包含的是字符串,依然可以通过默认索引取值。 ----------------------------------------------- 第三种: pd.Series({"a":1,"b":2}) 执行结果: a 1 b 2 dtype: int64 # 指定索引 ----------------------------------------------- 第四种: pd.Series(0,index=['a','b','c']) 执行结果: a 0 b 0 c 0 dtype: int64 # 创建一个值都是0的数组 -----------------------------------------------

   数据缺失

      dropna():过滤掉值为NaN的行 参数 inplace=True:设置后再打印原本数据则为真的去掉了

      fillna():填充缺失数据 参数 inplace=True:设置后再打印原本数据则为真的替换了

      isnull():返回布尔值数组,缺失值对应为True ---> 可以作为布尔值索引

      notnull():返回布尔值数组,缺失值对应为False ---> 可以作为布尔值索引


  特性 

    1:从 ndarray 创建Series ---> Series(arr) ---> 常用

    2:与标量(数字)运算 ---> sr * 2

    3:两个 Series 运算

    4:通用函数 ---> np.abs(sr)

    5:布尔值过滤 ---> sr[sr>0]

    6:统计函数 ---> mean()、sum()、cumsum()...

    7:从字典创建 Series ---> Series(dic)

    8:in 运算 ---> 'a' in sr 、 for a in sr....

    9: 键索引 ---> sr['a'] 和 sr[['a', 'b', 'c']] 花式索引

    10:键切片 ---> sr['a':'c']

    11:其他函数 ---> 如:get()等

    ......


 

  整数索引      

    loc:标签索引(index)竖向

    iloc:下标索引(value)横向


   Series 数据对齐

     pandas 在运算时候,会按照索引进行对齐然后计算。如果存在不同的索引,则结果的索引是两个操作索引的并集

----------------------------------------------------------------------------
sr1 = pd.Series([12,23,34], index=['c','a','d'])
sr2 = pd.Series([11,20,10], index=['d','c','a',])
sr1 + sr2
# 运行结果:
a    33
c    32
d    45
dtype: int64
# 可以通过这种索引对齐直接将两个Series对象进行运算
----------------------------------------------------------------------------
sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
sr1 + sr3
# 运行结果:
a    33.0
b     NaN
c    32.0
d    45.0
dtype: float64
# sr1 和 sr3的索引不一致,所以最终运行会发现b索引对应的值无法运算,就返回了NaN,一个缺失值
----------------------------------------------------------------------------
----------------------------------------------------------------------------
# 将缺失值设为0(fill_value参数),所以最后算出来b索引对应的结果为14
# 此外,还可以使用 sub/div/mul等方法
sr1 = pd.Series([12,23,34], index=['c','a','d'])
sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
sr1.add(sr3, fill_value=0)
运行结果:
a    33.0
b    14.0
c    32.0
d    45.0
dtype: float64
----------------------------------------------------------------------------

DateFrame   

  是一个 表格型的数据结构相当于是一个二维数组包含一组有序的列(索引)

  也可以被当做是由 Series 组成的字典, 并且公用一个字典

  创建:

第一种:
pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
# 产生的 DataFrame 会自动为 Series 分配索引,并且列会按照排序的顺序排列
运行结果:
   one two
0   1   4
1   2   3
2   3   2
3   4   1

> 指定列
可以通过 columns 参数指定顺序排列
data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
pd.DataFrame(data,columns=['one','two'])
# 打印结果会按照columns参数指定顺序
----------------------------------------------------------------------------
第二种:
pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})
运行结果:
   one  two
a   1   2
b   2   1
c   3   3

  常用属性和方法

    index:获取行索引

    columns:获取列索引

    T:转置

    values:获取值

    describe:获取快速统计信息(个数、平均值、标准差、最大最小值等)


  索引

    同样有行索引和列索引,可以使用标签(index)和位置(value)两种方法进行索引和切片


  切片  

    方法一:两个中括号 ---> 先取列再取行

    方法二:(推荐)使用 loc / iloc 属性 ---> 一个中括号,逗号隔开,先取行再取列

          loc :index

          iloc:value


  时间对象

    详见:https://www.cnblogs.com/xiaoyuanqujing/articles/11646477.html


  数据的分组和聚合    

    分组关键字:groupby

    集合函数:size()、mean()、sum()、first()、last()

    此外,得到的分组数据还可以进行排序

       sort_values(ascending=True) 根据值排序,ascending=True则代表升序,False代表降序

       sort_index(ascending=True) 根据索引排序

    小例子:

# 分析欧洲杯和欧洲冠军联赛决赛名单
import pandas as pd

url="https://en.wikipedia.org/wiki/List_of_European_Cup_and_UEFA_Champions_League_finals"
eu_champions=pd.read_html(url)  # 获取数据
a1 = eu_champions[2]    # 取出决赛名单
a1.columns = a1.loc[0]  # 使用第一行的数据替换默认的横向索引
a1.drop(0,inplace=True)  # 将第一行的数据删除
a1.drop('#',axis=1,inplace=True)  # 将以#为列名的那一列删除
a1.columns=['Season', 'Nation', 'Winners', 'Score', 'Runners_up', 'Runners_up_Nation', 'Venue','Attendance']  # 设置列名

a1.tail()  # 查看后五行数据
a1.drop([64,65],inplace=True)  # 删除其中的缺失行以及无用行
a1  # 查看a1

  补充:

    read_文件类型(位置) ---> 读取文件数据

    read_html(url) ---> 获取指定 url 页面中的所有表格数据,每个表格代表一个元素,可以根据索引取出

    to_文件类型(位置) ---> 保存数据可以指定参数 index=False 这样可以不保存自动生成的 index

原文地址:https://www.cnblogs.com/pupy/p/11985589.html