【Python与机器学习2-1】pandas 基本数据对象及操作

2023-11-18

series 相当于一维数组

要有向量化操作思想
- series是类似一维数组的对象,即一个列向量
- 初始化series
①通过列表初始化series,默认数字为索引

ser_obj=pandas.Series(list)   

②通过字典初始化series,字典的key为索引

country_dicts = {'CH': '中国',
                'US': '美国',
                'AU': '澳大利亚'}
country_dict_s = pd.Series(country_dicts)
  • 索引
    series除数字索引外,还可以通过列名进行索引
    通过索引拿到一个数据
    ①通过数据所在位置访问数据iloc
print('iloc:', country_dict_s.iloc[1]) #结果iloc: 中国

②通过默认的索引访问数据loc

print('loc:', country_dict_s.loc['US']) #结果loc: 美国

③通过下标访问数据[],其实用的就是loc

print('[]:', country_dict_s['US']) #结果 []: 美国

通过索引拿到多个不连续数据
通过数据所在位置,把索引放在一个list中进行访问

print('iloc:\n', country_dict_s.iloc[ [0, 2] ]) #通过位置
print('loc:\n', country_dict_s.loc[['US', 'AU']]) #通过索引
  • 获取数据和索引

    ser_obj.index  #获取索引,返回的是RangeIndex即Index对象
    ser_obj.values #获取数据,返回的是数组
    ser_obj.head(10) #预览数据
  • pandas处理缺失数据
    输入数据时,我们把缺失的数据写为None,pandas会根据此列表中大部分数据时什么类型来确定series的类型,none也会根据不同的series类型有不同的值

    numbers = [4, 5, 6, None] #列表中除缺失数据None外,其它都是数字
    print(pd.Series(numbers))  #输出结果类型为float,pandas自动可以把none处理成NAN

    这里写图片描述

    countries = ['中国', '美国', '澳大利亚', None] #列表中除缺失数据外为字符串
    print(pd.Series(countries))

    这里写图片描述

这里写图片描述
A是错误的,因为把index去掉后,就只有一个10,则默认生成的索引为0
D相当于是广播操作

DataFrame 相当于二维数组

类似于多维数组/表格数据
每列数据可以是不同的数据类型

  • 索引
    索引包括行索引(Index)和列索引(label)

  • 创建DataFrame
    ①通过ndarray构建DataFrame,多个series构成的列表初始化dataframe,即每个series是dataframe中的一行数据

import pandas as pd

country1 = pd.Series({'Name': '中国','Language': 'Chinese','Area': '9.597M km2','Happiness Rank': 79})
country2 = pd.Series({'Name': '美国','Language': 'English (US)',
'Area': '9.834M km2','Happiness Rank': 14})
country3 = pd.Series({'Name': '澳大利亚','Language': 'English (AU)','Area': '7.692M km2','Happiness Rank': 9})
df = pd.DataFrame([country1, country2, country3], index=['CH', 'US', 'AU']) #因为是用字典创建的series,则key为dataframe中列的索引

dt={0:[9,8,7,6],1:[3,2,1,0]} 
a=pd.DataFrame(dt) #得到了两列数据列名为01
  • 增加列数据,类似dict添加key-value
    因为dataframe中是列优先的,所以直接[]就认为是添加的列的数据
    如果个数小于要求的个数,会自动进行“广播”操作
df_obj[new_label] = data
eg:df['Region'] = ['亚洲', '北美洲', '大洋洲']
  • 索引
    ①行索引 loc和iloc
print(df.loc['CH'])
print(df.iloc[1])

②列索引 什么也不加,直接通过列名索引

print(df['Area'])
print(df[['Name', 'Area']]) #获取不连续的列数据

③混合索引
<1>先取列,再取行
先取列,因为默认列优先,所以什么也不用加
取出的数据类型为series,所以取行的时候就可以用series的索引方式

print(df['Area']['CH'])
print(df['Area'].loc['CH'])
print(df['Area'].iloc[0])

<2>先取行,再取列
先取行所以要加loc或iloc

print(df.loc['CH']['Area'])
print(df.iloc[0]['Area'])
  • 删除数据
    删除行数据
    ①drop,但drop是复制一份进行删除,不会修改原数据
print(df.drop(['CH'])) #输出的是删除ch后的df
print(df) #输出的df中df还在

②要在原数据中删除数据

print(df.drop(['CH'], inplace=True))

删除列数据,需要指定axis=1

print(df.drop(['Area'], axis=1))
  • 数据操作

从DataFrame中取出的数据进行操作后,会对原始数据产生影响

ranks = df['Happiness Rank']
ranks += 2 #这里对ranks中的rank都加2后,df中的rank也会加2

为了对原始数据不产生影响,要采用copy操作

ranks = df['Happiness Rank'].copy()
ranks += 2   #ranks中的rank加2,df中不变

index对象

  • 常见的Index种类
    ①index
    ②int64index
    ③DatetimeIndex,时间戳类型
    ④MultiIndex,层级索引
    区域当成外索引,即一级索引;国家当成内索引,即二级索引

设置层级索引set_index,列表中最左边是一级。

report_2015_df2 = reprot_2015_df.set_index(['Region', 'Country'])

但这样得出来数据的原始位置不改变,即外索引会一直重复出现,
这里写图片描述
把索引号进行排序后则相同的索引就会放到一起

report_2015_df2.sort_index(level=0) #level为0即按外部索引进行排序
  • index不可变
reprot_2016_df.index[0] = '丹麦' #会报错
  • 使用Index_col指定索引
reprot_2016_df = pd.read_csv('./2016.csv', 
                             index_col='Country',
                             usecols=['Country', 'Happiness Rank', 'Happiness Score', 'Region']) #将国家名作为索引
  • 重置Index,把原来的索引当成普通的一列,也就是将索引重新赋值为0-1
reprot_2016_df.reset_index(inplace=True) #加inplace是对原来的数据也进行修改
reprot_2016_df.reset_index() #不加是只对复制的数据进行修改
  • 重命名列名rename
reprot_2016_df.rename(columns={'Region': '地区', 'Happiness Rank': '排名', 'Happiness Score': '幸福指数'},
                     inplace=True)

boolean mask

布尔遮罩即过滤出来自己想要的那些数据

reprot_2016_df[(reprot_2016_df['地区'] == 'Western Europe') & (reprot_2016_df['排名'] > 10)]

pandas读取csv

  • 读取csv文件pd.read_csv()
reprot_2015_df = pd.read_csv('./2015.csv')
  • 输出读入数据的信息info()
print(reprot_2015_df.info()) #输出各列的数据类型等
  • 输出读入数据的统计信息describe(),即count,mean,std,min,四分位数等
print(reprot_2015_df.describe())

这里写图片描述
主要是知道一下这两者的区别,因为有的操作只能对dataframe进行操作
to_frame 可以把series转化成dataframe

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python与机器学习2-1】pandas 基本数据对象及操作 的相关文章

随机推荐

  • go爬虫框架colly的精简讲解

    1 拉取软件包 go get github com gocolly colly 2 创建colly的收集器 colly NewCollector 可以在创建的时候进行配置 c colly NewCollector colly AllowUR
  • Java 断点调试 循环调试

    java断点调试 以eclipse为例 1 基础调试 这里都是一些基础 除了最后一个都十分常用 名称 快捷键 作用 Resume F8 运行至下一断点 Step Into F5 进入方法 Step Over F6 运行完当前语句 User
  • PCL 点云按高程渲染颜色

    目录 一 算法原理 二 代码实现 三 结果展示 四 CloudCompare 五 备注 一 算法原理 首先按照Z轴方向求取所在点云的高程极值 包括高程最大值与最小值 计算高程中值 然后选取渲染的红 绿 蓝三种颜色的值 最后 自上而下 为红绿
  • NBA的字母哥如何拿到2415万美金年薪

    前言 NBA是世界上最成功的体育联盟之一 为了制定合理的运作规范 联盟会与球员工会签署劳资协议 协议里规定了球队的工资帽 一支球队球员工资总额的上限 顶薪 球员薪水的上限 底薪 球员的最低薪水 和其他规范 2011年 经历了停摆事件 联盟和
  • 一张图理清ASP.NET Core启动流程

    1 引言 对于ASP NET Core应用程序来说 我们要记住非常重要的一点是 其本质上是一个独立的控制台应用 它并不是必需在IIS内部托管且并不需要IIS来启动运行 而这正是ASP NET Core跨平台的基石 ASP NET Core应
  • JS 数组定义及详解

    一 数组简介 1 什么是数组 数组是值的有序集合 每个值叫做元素 每个元素在数组中都有数字位置编号 也就是索引 JS中的数组是弱类型的 数组中可以含有不同类型的元素 数组元素甚至可以是对象或其他数组 例如 var arr 1 true nu
  • kubernetes运维---calico之ipip模式抓包分析

    一 calico介绍 Calico是Kubernetes生态系统中另一种流行的网络选择 虽然Flannel被公认为是最简单的选择 但Calico以其性能 灵活性而闻名 Calico的功能更为全面 不仅提供主机和pod之间的网络连接 还涉及网
  • 功能实现:Unity中一个动画,只播放中间指定的一截,而且循环播放

    一 要播放的动画 直播中间一截 如图 总的动画为长度为2分钟零8秒 二 Button和对应事件 三 事件的代码 在Start 里面绑定 private void Awake myAnim animGo GetComponent
  • Flutter实现app自动升级

    话不多说 有过开发过移动应用的人都应该自动升级流程 首先获取本地应用版本 然后从服务器获取线上移动应用版本号作比较是否升级 第一步获取版本信息 API https pub dev packages package info 获取应用版本号
  • iview on-change用法

    原地址 https segmentfault com q 1010000011589626 iview框架select选择框on change事件如何返回当前选中的值 这是文档中的解释 on change 选中的Option变化时触发 默认
  • C++类与封装实例说明

    众所周知 C 具有三大特性 分别为封装 继承 多态 今天有位同学问到我应该如何去理解 我翻了翻笔记本 找到以前上课时学到的案例来解释 首先 成员函数存在希望公开或不希望公开的属性 这也构成了定义成员函数访问级别的三项 1 public 公开
  • 架构师--IT策略灵魂的创造者

    http blog csdn net aspop archive 2006 01 21 585823 aspx 在比尔 盖茨的众多称谓中 据说他更偏爱 首席软件架构师 同样 在网易创始人丁磊名字前 也有 首席架构师 这样的称谓 对于企业来说
  • IDEA国际化资源Key无法全局重命名的解决方案

    一 前言 最近在开发中使用到了HibernateValidator进行入参校验以及错误消息的国际化支持 大家应该都知道在使用HibernateValidator进行校验的时候 我们只需在需要在校验的变量上添加相应的注解 同时在message
  • Flutter 应用程序更新

    Flutter 应用程序更新 原文 https medium com flutter community in app update the flutter way 2f25e4a02c02 前言 当您推出应用程序的新版本时 您希望您的用户
  • CSS3背景渐变

    我们经常可以看到有些背景色并不是纯色 而是好看的渐变色 css3知我懂我 给我们提供了制作渐变背景色的属性 渐变主要包括线性渐变和径向渐变 接下来逐一介绍用法 1 线性渐变 线性渐变 linear gradients 表示颜色沿着一条直线过
  • 设计模式--原型模式

    原型模式 属于创建型模式 基本原理 又称为克隆模式 拷贝本身对象 可以直接使用语言中的拷贝构造 主要流程 在构建对象的时候实现一个对本身的拷贝函数 特别注意 要有对应的销毁方法 include
  • 集合框架(二)

    集合框架 二 回顾 Collection List Set的特点 Collection 不唯一的 无序的 List 不唯一的 有序 Set 唯一的 无序的 Collection和Collections的区别 Collection是集合的顶级
  • C语言/C++实现栈操作

    一 栈的概念 栈是一种常用的数据结构 它遵循先入后出 Last In First Out LIFO 的原则 栈的操作只在栈的一端进行 该端被称为栈顶 而另一端称为栈底 栈的基本操作包括压栈 入栈 push 和弹栈 出栈 pop 分别用于将元
  • HTTP 常见错误

    HTTP 错误 400 400 请求出错 由于语法格式有误 服务器无法理解此请求 不作修改 客户程序就无法重复此请求 HTTP 错误 401 401 1 未授权 登录失败 此错误表明传输给服务器的证书与登录服务器所需的证书不匹配 请与 We
  • 【Python与机器学习2-1】pandas 基本数据对象及操作

    series 相当于一维数组 要有向量化操作思想 series是类似一维数组的对象 即一个列向量 初始化series 通过列表初始化series 默认数字为索引 ser obj pandas Series list 通过字典初始化serie