pypandas

pypandas

PandasPython (opens new window)的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。

Pandas 适用于处理以下类型的数据:

  • 与 SQL 或 Excel 表类似的,含异构列的表格数据;
  • 有序和无序(非固定频率)的时间序列数据;
  • 带行列标签的矩阵数据,包括同构或异构型数据;
  • 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。

Pandas 的主要数据结构是 Series (opens new window)(一维数据)与 DataFrame (opens new window)(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。对于 R 用户,DataFrame 提供了比 R 语言 data.frame 更丰富的功能。Pandas 基于 NumPy (opens new window)开发,可以与其它第三方科学计算支持库完美集成。

Pandas 就像一把万能瑞士军刀,下面仅列出了它的部分优势 :

  • 处理浮点与非浮点数据里的缺失数据,表示为 NaN
  • 大小可变:插入或删除 DataFrame 等多维对象的列;
  • 自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;
  • 强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;
  • 把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;
  • 基于智能标签,对大型数据集进行切片花式索引子集分解等操作;
  • 直观地合并(merge)、**连接(join)**数据集;
  • 灵活地重塑(reshape)、**透视(pivot)**数据集;
  • 支持结构化标签:一个刻度支持多个标签;
  • 成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;
  • 时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。

这些功能主要是为了解决其它编程语言、科研环境的痛点。处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。

其它说明:

  • Pandas 速度很快。Pandas 的很多底层算法都用 Cython (opens new window)优化过。然而,为了保持通用性,必然要牺牲一些性能,如果专注某一功能,完全可以开发出比 Pandas 更快的专用工具。
  • Pandas 是 statsmodels (opens new window)的依赖项,因此,Pandas 也是 Python 中统计计算生态系统的重要组成部分。
  • Pandas 已广泛应用于金融领域。
数据结构
维数名称描述
1Series带标签的一维同构数组
2DataFrame带标签的,大小可变的,二维异构表格
为什么有多个数据结构?

Pandas 数据结构就像是低维数据的容器。比如,DataFrame 是 Series 的容器,Series 则是标量的容器。使用这种方式,可以在容器中以字典的形式插入或删除对象。

此外,通用 API 函数的默认操作要顾及时间序列与截面数据集的方向。多维数组存储二维或三维数据时,编写函数要注意数据集的方向,这对用户来说是一种负担;如果不考虑 C 或 Fortran 中连续性对性能的影响,一般情况下,不同的轴在程序里其实没有什么区别。Pandas 里,轴的概念主要是为了给数据赋予更直观的语义,即用“更恰当”的方式表示数据集的方向。这样做可以让用户编写数据转换函数时,少费点脑子。

处理 DataFrame 等表格数据时,index(行)或 columns(列)比 axis 0axis 1 更直观。用这种方式迭代 DataFrame 的列,代码更易读易懂:

for col in df.columns:
    series = df[col]
    # do something with series
大小可变与数据复制

Pandas 所有数据结构的值都是可变的,但数据结构的大小并非都是可变的,比如,Series 的长度不可改变,但 DataFrame 里就可以插入列。

Pandas 里,绝大多数方法都不改变原始的输入数据,而是复制数据,生成新的对象。 一般来说,原始输入数据不变更稳妥。

Series

andas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。

Series 由索引(index)和列组成,函数如下:

pandas.Series( data, index, dtype, name, copy)
参数说明:
  • data:一组数据(ndarray 类型)。

  • index:数据索引标签,如果不指定,默认从 0 开始。

  • dtype:数据类型,默认会自己判断。

  • name:设置名称。

  • copy:拷贝数据,默认为 False。

    实例
import pandas as pd
a = [1,2,3]
mar = pd.Series(a)
print(mar)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KEaSBHaS-1679281535589)(D:\Users\32458\Desktop\笔记\pypandas\pandas截图\微信截图_20221205102735.png)]

从上图可知,如果没有指定索引,索引值就从 0 开始,我们可以根据索引值读取数据:

索引值读取数据
实例:
import pandas as pd
a = [1, 2, 3]
myvar = pd.Series(a)
print(myvar[1])

输出结果

2

指定索引值

import pandas as pd
a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index = ["x", "y", "z"])
print(myvar)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gxi2Ubqt-1679281535590)(D:\Users\32458\Desktop\笔记\pypandas\pandas截图\微信截图_20221205103057.png)]

import pandas as pd
import numpy as np
a = [3,2,5,7,5,9,5]
print(a)
s1 = pd.Series(a)
print(s1)
# #查看类型
 print(type(s1))
# #获取标签,索引
 print(s1.index)
# #展开下表
print(list(s1))
# #s1.values:获取数据 、type(s1.values):把数据转化为数组的形式
 print(s1.values,type(s1.values))
# #通过标签获取所对应的值
 print(s1[1])
#print(a[-1])
#不可以通过负索引来找数据
print(s1[-1])
#我们可以把标签定义为负数
 s1[-1] =55
 print(s1)
 print(s1[-1])
 print(s1.index)
#可以指定不同的标签
 s1['a'] = 66
 print(s1)
 print(s1.index)

#字典类型
 d = {'a':1,'b':2,'c':3}
 ser = pd.Series(d)
 print(ser)
 print(ser.index)
 print(ser.values)
#ser['s'] = 77
 print(ser)
 print(ser['s'])
# #如果标签是非数字类型,可以通过标签的额下标来取值
 print(ser[3])
#如果标签有数字类型的话,只能通过标签来获取数据
c = {'a':1,'b':2,'c':3,4:25}
print(c)
ser = pd.Series(c)
print(ser)
print(ser.index)
print(ser.values)
print(ser[4])
pd.Series(data=None, index=None, dtype=None, name=None, copy=False)

参数:

data 输入的数据,可以是列表、常量、ndarray 数组等,如果是字典,则保持参数顺序
index 索引值,必须是可散列的(不可变数据类型(str,bytes和数值类型)),并且与数据具有相同的长度,允许使用非唯一索引值。如果未提供,将默认为RangeIndex(0,1,2,…,n)
dtype 输出系列的数据类型。如果未指定,将从数据中推断
name 为Series定义一个名称
copy 表示对 data 进行拷贝,默认为 False,仅影响Series和ndarray数组

参数index
#参数index
#通过索引(下标),来创建数组
s = pd.Series(100,index=range(5))
print(s)

s2 = pd.Series(100,index=list('abcdef'))
print(s2)
通过显示索引来定义标签
#通过显示索引来定义标签
data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,500,400,600])
print(s)
d = {'a':1,'b':2,'c':3,'d':4}
#可以通过标签来改变数据的顺序
s3 = pd.Series(d,index=['a','c','f'])
print(s3)
#可以通过标签来显示指定数据
s4 = pd.Series(d,index=['a','c'])
print(s4)
#如果不逊在的数据会显示NaN
s5 = pd.Series(d,index=['a','c','j'])
print(s5)
name参数
data1 = {'beijing':2200,'shanghai':2500,'shenzhen':1800}
print(data1)
ser  =pd.Series(data1)
print(ser)
ser.name = 'city_DGP'
ser.index.name="city_DGP"
print(ser)
print(ser.name)
Series的索引/切片
#通过下标来获取数据
s = pd.Series(np.random.rand(5))
print(s)
print(s[3],type(s[3]),s[3].dtype)
print(s[-3:3])
标签
s = pd.Series(np.random.rand(5),index=list('abcde'))
print(s)
print(s['a'])
#通过标签下索引切片来获取数据
print(s[1:3])
#通过标签切片来获取数据
print(s['a':'c'])
#用标签获取多个数据,需要把他放在列表里[[多个标签]]
sata = s[['d','a','c']]
print(sata)
查看数据从前边数或者后边数
s = pd.Series(np.random.rand(15))
print(s)
print(s.head())# 默认获取到前五条数据
print(s.head(1))
print(s.tail())# 默认获取到后五条数据
print(s.tail(8))
重新定义索引
s = pd.Series(np.random.rand(5),index=list('abcde'))
print(s)
#可以重新定义索引,如果么有标签,就会用NaN补齐
s1 = s.reindex(['d','a','e','q','w'])
print(s1)
对齐运算
s1 = pd.Series(np.random.rand(3),index=list['lilei','hanmeimei','lily'])
s2 = pd.Series(np.random.rand(3),index=list['lihua','hanmeimei','lilei'])
print(s1)
print(s2)
print(s1+s2)
删除
s = pd.Series(np.random.rand(5),index=list('abcde'))
print(s)
#inplace:默认的是False,重新建一个数据(不包括删除的数据),原数组不发生变化
#inplace=True,就会删除数据返回None,原数组就会发生变化
s1 = s.drop('a')
print(s1)
添加
s = pd.Series(np.random.rand(5),index=list('abcde'))
s['w'] = 22
s['-1']  =44
print(s[-2])
print(s)
print(s)

DataFrame

import numpy as np
import pandas as pd
创建表格数据结构DataFrame
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)
s = pd.Series(data)
print(s)
使用嵌套列表创建
data = [['xiaoming',20],['lilie',23],['hanmeimei',22]]
df = pd.DataFrame(data)
print(df)

### DataFrame

```python
import numpy as np
import pandas as pd
创建表格数据结构DataFrame
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)
s = pd.Series(data)
print(s)
使用嵌套列表创建
data = [['xiaoming',20],['lilie',23],['hanmeimei',22]]
df = pd.DataFrame(data)
print(df)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值