侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)

Python  /  管理员 发布于 7年前   239

前言

最近在网上搜了许多关于pandas.DataFrame的操作说明,都是一些基础的操作,但是这些操作组合起来还是比较费时间去正确操作DataFrame,花了我挺长时间去调整BUG的。我在这里做一些总结,方便你我他。感兴趣的朋友们一起来看看吧。

一、创建DataFrame的简单操作:

1、根据字典创造:

In [1]: import pandas as pdIn [3]: aa={'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]}In [4]: bb=pd.DataFrame(aa)In [5]: bbOut[5]:  one three two0 1 3 21 2 4 32 3 5 4`

字典中的keys就是DataFrame里面的columns,但是没有index的值,所以需要自己设定,不设定默认是从零开始计数。

bb=pd.DataFrame(aa,index=['first','second','third'])bbOut[7]:  one three twofirst 1 3 2second 2 4 3third 3 5 4

2、从多维数组中创建

import numpy as npIn [9]: del aaIn [10]: aa=np.array([[1,2,3],[4,5,6],[7,8,9]])In [11]: aaOut[11]: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])In [12]: bb=pd.DataFrame(aa)In [13]: bbOut[13]:  0 1 20 1 2 31 4 5 62 7 8 9

从多维数组中创建就需要为DataFrame赋值columns和index,否则就是默认的,很丑的。

bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])In [15]: bbOut[15]:  one two three22 1 2 333 4 5 644 7 8 9

3、用其他的DataFrame创建

bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])bbOut[15]:  one two three22 1 2 333 4 5 644 7 8 9cc=bb[['one','three']].copy()CcOut[17]:  one three22 1 333 4 644 7 9

这里的拷贝是深拷贝,改变cc中的值并不能改变bb中的值。

cc['three'][22]=5bbOut[19]:  one two three22 1 2 333 4 5 644 7 8 9ccOut[20]:  one three22 1 533 4 644 7 9

二、DataFrame的索引操作:

对于一个DataFrame来说,索引是最烦的,最易出错的。

1、索引一列或几列,比较简单:

bb['one']Out[21]: 22 133 444 7Name: one, dtype: int32

多个列名需要将输入的列名存在一个列表里,才是个collerable的变量,否则会报错。

bb[['one','three']]Out[29]:  one three22 1 333 4 644 7 9

2、索引一条记录或几条记录:

bb[1:3]Out[27]:  one two three33 4 5 644 7 8 9bb[:1]Out[28]:  one two three22 1 2 3

这里注意冒号是必须有的,否则是索引列的了。

3、索引某几列的变量的某几条记录,这个折磨了我好久:

第一种

bb.loc[[22,33]][['one','three']]Out[30]:  one three22 1 333 4 6

这种不能改变这里面的值,你只是能读值,不能写值,可能和loc()函数有关:

bb.loc[[22,33]][['one','three']]=[[2,2],[3,6]]In [32]: bbOut[32]:  one two three22 1 2 333 4 5 644 7 8 9

第二种:也是只能看

bb[['one','three']][:2]Out[33]:  one three22 1 333 4 6

想要改变其中的值就会报错。

In [34]: bb[['one','three']][:2]=[[2,2],[2,2]]-c:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.Try using .loc[row_index,col_indexer] = value insteadF:\Anaconda\lib\site-packages\pandas\core\frame.py:1999: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame return self._setitem_slice(indexer, value)

第三种:可以改变数据的值!!!

Iloc是按照数据的行列数来索引,不算index和columns

bb.iloc[2:3,2:3]Out[36]:  three44 9bb.iloc[1:3,1:3]Out[37]:  two three33 5 644 8 9bb.iloc[0,0]Out[38]: 1

下面是证明:

bb.iloc[0:4,0:2]=[[9,9],[9,9],[9,9]]In [45]: bbOut[45]:  one two three22 9 9 333 9 9 644 9 9 9

三、在原有的DataFrame上新建一个columns或几个columns

1、什么都不用的,只能单独创建一列,多列并不好使,亲测无效:

bb['new']=[2,3,4]bbOut[51]:  one two three new22 9 9 3 233 9 9 6 344 9 9 9 4bb[['new','new2']]=[[2,3,4],[5,3,7]]KeyError: "['new' 'new2'] not in index"

赋予的list基本就是按照所给index值顺序赋值,可是一般我们是要对应的index进行赋值,想要更高级的赋值就看后面的了。

2、使用字典进行多列按index赋值:

aa={33:[234,44,55],44:[657,77,77],22:[33,55,457]}In [58]: bb=bb.join(pd.DataFrame(aa.values(),columns=['hi','hello','ok'],index=aa.keys()))In [59]: bbOut[59]:  one two three new hi hello ok22 9 9 3 2 33 55 45733 9 9 6 3 234 44 5544 9 9 9 4 657 77 77

这里aa是一个字典和列表的嵌套,相当于一条记录,使用keys当做index名而不是一般默认的columns名。达到了按index多列匹配的目的。由于dict()储存是混乱的,之间用dict()而不给他的index赋值会记录错乱,这一点注意值得注意。

四、删除多列或多记录:

删除列

bb.drop(['new','hi'],axis=1)Out[60]:  one two three hello ok22 9 9 3 55 45733 9 9 6 44 5544 9 9 9 77 77

删除记录

bb.drop([22,33],axis=0)Out[61]:  one two three new hi hello ok44 9 9 9 4 657 77 77

跟大家分享一篇关于python中pandas.DataFrame对行与列求和及添加新行与列示例,感兴趣的朋友们可以看看。

DataFrame还有很多功能还没有涉及,等以后有涉及到,看完官网的API之后,还会继续分享,everything is ok。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家的支持。


  • 上一条:
    Python中functools模块函数解析
    下一条:
    Python中str.format()详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客