前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习测试笔记(2)——Pandas

机器学习测试笔记(2)——Pandas

作者头像
顾翔
发布2020-12-15 10:34:15
1.5K0
发布2020-12-15 10:34:15
举报
文章被收录于专栏:啄木鸟软件测试

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

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

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

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

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

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

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

其它说明:

  • Pandas 速度很快。Pandas 的很多底层算法都用 Cython 优化过。然而,为了保持通用性,必然要牺牲一些性能,如果专注某一功能,完全可以开发出比 Pandas 更快的专用工具。
  • Pandas 是 statsmodels 的依赖项,因此,Pandas 也是 Python 中统计计算生态系统的重要组成部分。
  • Pandas 已广泛应用于金融领域。
代码语言:javascript
复制
# coding:utf-8
import numpy  as np
import pandas  as pd

def init():
    df =  pd.DataFrame(np.array([[1,2],[3,4],[5,6],[7,8]]),columns=['A','B'],index=[3,4,5,6])
return df

1 创建数据

代码语言:javascript
复制
def  create_data():
# 1.1使用列表创建序列
    s1 = pd.Series([1,2,3,4,5])
    print("s1内容:\n",s1)
    print("s1索引:\n",s1.index)
    print("s1值:\n",s1.values)
#s1内容:
#0     1
#1     2
#2     3
#3     4
#4     5
#dtype: int64
#s1索引:
#RangeIndex(start=0, stop=5, step=1)
#s1值:
#[1 2 3 4 5]
#1.2由字典创建序列
    dic =  {"A":1,"B":2,"C":3,"D":4,"E":5}
    s2 =  pd.Series(dic,index=["A","C","E"])
    print("s2:\n",s2)
#s2:
#A     1
#C     3
#E     5
#dtype: int64
#1.3  通过序列创建DataFrame
    df1 =  pd.DataFrame(s1,columns=["number"]) #指定列名
    print("DataFrame1:\n",df1)
#DataFrame1:
#number
#0        1
#1        2
#2        3
#3        4
#4        5
#1.4通过序列对象产生DataFrame
    df2 =  pd.DataFrame({'A':1,'B':s1,'C':pd.Timestamp('20201208'),'D':'hello'})
    print("DataFrame2:\n",df2)
#DataFrame2:
#     A  B          C      D
#0   1  1 2020-12-08  hello
#1   1  2 2020-12-08  hello
#2   1  3 2020-12-08  hello
#3   1  4 2020-12-08  hello
#4   1  5 2020-12-08  hello

#1.5通过numpy产生DataFrame
    df3 =  pd.DataFrame(np.array([[1,2],[3,4],[5,6],[7,8]]),columns=['A','B'],index=[3,4,5,6])
    print("DataFrame3:\n",df3)
#DataFrame3:
#A   B
#3   1  2
#4   3  4
#5   5  6
#6   7  8

2显示数据

代码语言:javascript
复制
def  view_data(df):
    print("DataFrame:概要信息\n",df.describe())
    print("DataFrame:头部\n",df.head())
    print("DataFrame 尾部:\n",df.tail(2))
    print("DataFrame 索引:\n",df.index)
    print("DataFrame 列名:\n",df.columns)

DataFrame:概要信息

A B

count 4.000000 4.000000

mean 4.000000 5.000000

std 2.581989 2.581989

min 1.000000 2.000000

25% 2.500000 3.500000

50% 4.000000 5.000000

75% 5.500000 6.500000

max 7.000000 8.000000

DataFrame:头部

A B

3 1 2

4 3 4

5 5 6

6 7 8

DataFrame 尾部:

A B

5 5 6

6 7 8

DataFrame 索引:

Int64Index([3, 4, 5, 6], dtype='int64')

DataFrame 列名:

Index(['A', 'B'], dtype='object')

3 排序数据

代码语言:javascript
复制
def  sort_df(df):
    print("按轴排序:\n",df.sort_index(axis=1,ascending=False))
    print("按值排序:\n",df.sort_values(by='B',ascending=False))

按轴排序:

B A

3 2 1

4 4 3

5 6 5

6 8 7

按值排序:

A B

6 7 8

5 5 6

4 3 4

3 1 2

sort_values

  • by:指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
  • axis:若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
  • ascending:是否按指定列的数组升序排列,默认为True,即升序排列
  • inplace:是否用排序后的数据集替换原来的数据,默认为False,即不替换
  • na_position:{‘first’,‘last’},设定缺失值的显示位置

4 获得值

代码语言:javascript
复制
def  get_value(df):
    print("原数据:\n",df)
    print("按列获取内容:\n",df['A'])
    print("切片操作:\n",df[0:3])
    print("基于行列标签获取数据(loc):\n",df.loc[:4,:'C'])
    print("基于行列索引获取数据(iloc):\n",df.iloc[:2,:2])

原数据:

A B

3 1 2

4 3 4

5 5 6

6 7 8

按列获取内容(仅获取A列):

3 1

4 3

5 5

6 7

Name: A, dtype:int32

切片操作:

A B

3 1 2

4 3 4

5 5 6

基于行列标签获取数据(loc):

A B

3 1 2

4 3 4

基于行列索引获取数据(iloc):

A B

3 1 2

4 3 4

5 数据操作

代码语言:javascript
复制
def  data_oper(df):
    print("原数据:\n",df)
    print("每个字均+1:\n",df.add(1))
    print("数据每一列均值:\n",df.mean())
    print("数据每一行均值:\n",df.mean(1))
    print("apply函数:\n",df.apply(lambda  x:x.max()-x.min()))

原数据:

A B

3 1 2

4 3 4

5 5 6

6 7 8

每个字均+1:

A B

3 2 3

4 4 5

5 6 7

6 8 9

数据每一列均值:

A 4.0

B 5.0

dtype: float64

数据每一行均值:

3 1.5

4 3.5

5 5.5

6 7.5

dtype: float64

apply函数:

A 6

B 6

6 文件操作

代码语言:javascript
复制
def  load_file():
    data = pd.read_csv('my.csv')
    print("my.csv:\n",data)
    data.to_csv('my.csv',index=False)
#index=False 不把索引写进文件中
    data = pd.read_excel('my.xlsx','Sheet1')
    print("my.xlsx:\n",data)
#pip3 install openpyxl
     data.to_excel('my.xlsx',sheet_name='Sheet1',index=False)
代码语言:javascript
复制
if  __name__=="__main__":
    df = init()
    create_data()
    view_data(df)
    sort_df(df)
    get_value(df)
    data_oper(df)
        load_file()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档