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


Posted in Python onMarch 12, 2017

前言

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

一、创建DataFrame的简单操作:

1、根据字典创造:

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

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

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

2、从多维数组中创建

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

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

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

3、用其他的DataFrame创建

bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])
bb
Out[15]: 
 one two three
22 1 2 3
33 4 5 6
44 7 8 9
cc=bb[['one','three']].copy()
Cc
Out[17]: 
 one three
22 1 3
33 4 6
44 7 9

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

cc['three'][22]=5
bb
Out[19]: 
 one two three
22 1 2 3
33 4 5 6
44 7 8 9

cc
Out[20]: 
 one three
22 1 5
33 4 6
44 7 9

二、DataFrame的索引操作:

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

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

bb['one']
Out[21]: 
22 1
33 4
44 7
Name: one, dtype: int32

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

bb[['one','three']]
Out[29]: 
 one three
22 1 3
33 4 6
44 7 9

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

bb[1:3]
Out[27]: 
 one two three
33 4 5 6
44 7 8 9
bb[:1]
Out[28]: 
 one two three
22 1 2 3

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

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

第一种

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

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

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

第二种:也是只能看

bb[['one','three']][:2]
Out[33]: 
 one three
22 1 3
33 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 instead
F:\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]: 
 three
44 9

bb.iloc[1:3,1:3]
Out[37]: 
 two three
33 5 6
44 8 9
bb.iloc[0,0]
Out[38]: 1

下面是证明:

bb.iloc[0:4,0:2]=[[9,9],[9,9],[9,9]]
In [45]: bb
Out[45]: 
 one two three
22 9 9 3
33 9 9 6
44 9 9 9

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

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

bb['new']=[2,3,4]
bb
Out[51]: 
 one two three new
22 9 9 3 2
33 9 9 6 3
44 9 9 9 4
bb[['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]: bb
Out[59]: 
 one two three new hi hello ok
22 9 9 3 2 33 55 457
33 9 9 6 3 234 44 55
44 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 ok
22 9 9 3 55 457
33 9 9 6 44 55
44 9 9 9 77 77

删除记录

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

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

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

总结

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

Python 相关文章推荐
Python转换HTML到Text纯文本的方法
Jan 15 Python
Python的Django框架下管理站点的基本方法
Jul 17 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
django manage.py扩展自定义命令方法
May 27 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
python利用百度AI实现文字识别功能
Nov 27 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
Python中可变和不可变对象的深入讲解
Aug 02 Python
python blinker 信号库
May 04 Python
Python中str.format()详解
Mar 12 #Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
Mar 12 #Python
Python中关键字nonlocal和global的声明与解析
Mar 12 #Python
Python中模块string.py详解
Mar 12 #Python
Python中第三方库Requests库的高级用法详解
Mar 12 #Python
python 获取网页编码方式实现代码
Mar 11 #Python
python 爬虫出现403禁止访问错误详解
Mar 11 #Python
You might like
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
TensorFlow实现Logistic回归
2018/09/07 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Python爬取网页信息的示例
2020/09/24 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
社区党总支书记先进事迹材料
2014/01/24 职场文书
新店开张活动方案
2014/08/24 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
党校学习党性分析材料
2014/12/19 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis