pandas学习基本概念:Series与DataFrame

目录

Pandas简介 

Pandas理解

Series类型

(一)创建:

(二)基本操作

DataFrame类型

(一)DataFrame基本概念

(二)DataFrame类型创建

(三)数据类型操作

(1)重新索引:.reindex()

(2)索引类型及其常用方法

(3) 删除指定索引对象

(四)数据类型运算

(1)算数运算法则

(2)比较运算法则

 


Pandas简介 

提供高性能易用数据类型和分析工具的第三方库。

引用:import pandas as pd

基于NumPy实现,常与NumPy和Matplotlib一同使用。

Pandas理解

两个数据类型:Series(一维)、DataFrame(二维及以上)

基于上述数据类型的各类操作:基本操作、运算操作、特征类操作、关联类操作

NumPy Pandas
基础数据类型 扩展数据类型

关注数据的结构表达(数据之间构成的维度,通过什么维度将一组数据存储和表达)

维度:数据间的关系

关注数据的应用表达(在使用数据时,如何更有效地提前并运用数据,过度的维度关系不利于数据的实际运用)

数据与索引之间的关系

(无论是series还是dataframe都支持有效的索引)

 

 

 

 

 

 

Series类型

由一组数据和与之相关的数据索引组成

(一)创建:

  • Python列表:index与列表元素个数一致。
  • 标量值:index表达Series类型的尺寸。
  • Python字典:键值对中的键是索引,index从字典中进行选择操作
  • ndarray:索引和数据都可以通过ndarra类型创建。
  • 其他函数:range()函数等
import pandas as pd
import numpy as np
#从标量创建,必须指定索引
a = pd.Series(25, index = ['a', 'b', 'c'])
print(a)
#从字典创建01
d1 = pd.Series({'a':9, 'b':8, 'c':7})
print(d1)
#从字典创建02:由index指定series结构,并从字典中选取相应值的过程,若无对应值,值NaN
d2 = pd.Series({'a': 9, 'b': 8, 'c': 7}, index=['c', 'a', 'b', 'd'])
print(d2)
#从ndarray创建,若不指定index,默认0始数字
n = pd.Series(np.arange(5), index=np.arange(9, 4, -1))
print(n)

pandas学习基本概念:Series与DataFrame_第1张图片

(二)基本操作

Series类型包括index和values两部分

  • .index()获取所有索引,类型为index
  • .value()获取所有数据,类型为numpy.array
  • 索引包括自动索引和自定义索引,两套索引并存但不能混用,如一起使用,会被当作自定义索引。

Series类型的操作类型类似ndarray类型

  • 索引方法相同:series[index](结果是value)、series[:n](切片,结果依然是series)、series[比较关系,结果依然是series]
  • Numpy中运算和操作可用于Series类型
  • 可以通过自定义索引的列表进行切片
  • 可以通过自动索引进行切片,如果存在自定义索引,则一同被切片

Series类型的操作类型类似python字典类型

  • 通过自定义索引访问
  • 使用保留字in:是否在索引的列表中(不判断自动索引)
  • 使用get方法:b.get('index',200),从series中提取index对应的值,如不存在,返回第二个参数的值

Series类型对齐操作

Series类型的name属性:series.name、series.index.name

Series类型的修改:Series对象可以随时修改并立刻生效

DataFrame类型

(一)DataFrame基本概念

  • DataFrame类型由共同相同索引的一组列组成,是一个表格型的数据类型,每列值类型可以不同
  • DataFrame既有行索引,也有列索引。
  • DataFrame类型常表达二维类型,也可以表达多维数据。
  • 纵向索引:index;横向列:column,column[0]为索引列(零轴)

(二)DataFrame类型创建

  • 二维ndarray对象
  • 有一维ndarray、列表、字典、元组或Series构成的字典
  • Series类型
  • 其他的DataFrame类型
import pandas as pd
import numpy as np

#从二维ndarray对象创建, 自动生成行、列索引,都是零开始的整数
d = pd.DataFrame(np.arange(10).reshape(2, 5))
print(d)
#从一维ndarray对象字典创建,字典中的键默认为自定义的列索引,且索引自动对齐
dt = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
      'two': pd.Series([9, 8, 7, 6], index=['a', 'b', 'c', 'd'])}
d2 = pd.DataFrame(dt)
print(d2)
    #选取列的时候若列不存在,会补为空列
pd.DataFrame(dt, index=['b', 'c', 'd'], columns=['two', 'three'])

#从列表类型的字典创建
dl = {'one': [1, 2, 3, 4], 'two': [9, 8, 7, 6]}
d3 = pd.DataFrame(dl, index=['a', 'b', 'c', 'd'])
print(d3)

pandas学习基本概念:Series与DataFrame_第2张图片

import pandas as pd
import numpy as np

d1 = {'城市': ['北京', '上海', '广州', '深圳', '沈阳'],
      '环比': [101.5, 101.2, 101.3, 102.0, 100.1],
      '同比': [101.5, 101.2, 101.3, 102.0, 100.1],
      '定基': [101.5, 101.2, 101.3, 102.0, 100.1]}
d3 = pd.DataFrame(d1, index=['c1', 'c2', 'c3', 'c4', 'c5'])
print(d3) #列顺序不一定和字典中一致

print(d3.index) #行索引
print(d3.columns)#列索引
print(d3.values)#值
print(d3['同比'])#指定列
print(d3.loc['c2'])#指定行
print(d3['同比']['c2'])#定位

pandas学习基本概念:Series与DataFrame_第3张图片

 

(三)数据类型操作

 

(1)重新索引:.reindex()

d3 = d3.reindex(index=['c5', 'c4', 'c3', 'c2', 'c1'])
d3 = d3.reindex(columns=['城市', '同比', '环比', '定基'])
print(d3)

#reindex中其他参数
#fill_value:重新索引中,用于填充缺失位置索引的值
#method:填充方法,ffill表示当前值向前填充、bfill向后填充
#limit:最大填充量
#copy:默认true,生成新的对象,False时,新旧相等不复制

newc = d3.columns.insert(4, "新增")
newd = d3.reindex(columns=newc, fill_value=200 )
print(newd)

pandas学习基本概念:Series与DataFrame_第4张图片

pandas学习基本概念:Series与DataFrame_第5张图片

 

(2)索引类型及其常用方法

index对象是不可修改的,可以通过索引修改数据

nc = d3.columns.delete(2)
ni = d3.index.insert(5, 'c0')
nd = d3.reindex(index=ni, columns=nc, method='ffill')
print(nd)

(3) 删除指定索引对象

d3 = d3.drop('c5')  #drop默认操作零轴上的元素
d3 = d3.drop('同比', axis=1)
print(d3)

pandas学习基本概念:Series与DataFrame_第6张图片

(四)数据类型运算

(1)算数运算法则

  • 算数运算根据行列索引,补齐后运算,运算默认产生浮点数
  • 补齐时缺项填充NaN(空值)
  • 二维和一维、一维和零维之间为广播运算(和每一个元素计算)
import numpy as np
import pandas as pd

a = pd.DataFrame(np.arange(12).reshape(3,4))
b = pd.DataFrame(np.arange(20).reshape(4,5))

print(a+b)#标签相同的行进行运算,标签不同的补齐后进行运算

#或者使用方法形式运算,优点在于可以设置一些参数
b.add(a, fill_value = 100)
print(b)
a.mul(b, fill_value = 0)
print(a)

#不同维度的运算,广播运算
c = pd.Series(np.arange(4))
print(c)
print(c-10)#每个元素与零维操作即可
print(b-c)#默认发生在1轴

#如果希望发生在零轴上,即b中每一列都减去c的每一列的对应元素,则需要指定零轴参与运算
b.sub(c, axis=0)
print(b)

pandas学习基本概念:Series与DataFrame_第7张图片

pandas学习基本概念:Series与DataFrame_第8张图片

(2)比较运算法则

比较运算法则只能比较相同索引的元素,不进行补齐

二维和一维,一维和零维间为广播运算

采用>、<、>=、<=、==、!=等符号进行的二元运算产生布尔对象

import numpy as np
import pandas as pd

#在同一维度运算,要求ab尺寸一致,若不同则会报错
a = pd.DataFrame(np.arange(12).reshape(3, 4))
b = pd.DataFrame(np.arange(12, 0, -1).reshape(3, 4))
print(a)
print(b)
print(a>b)

#不同维度,广播运算,默认在1轴.a的每一行都与c比较
c = pd.Series(np.arange(4))
print(c)
print(a>c)
print(c>5)

pandas学习基本概念:Series与DataFrame_第9张图片

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(#,Python)