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对指定目录下文件进行批量重命名的方法
Apr 18 Python
使用rpclib进行Python网络编程时的注释问题
May 06 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
python斐波那契数列的计算方法
Sep 27 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
python实现自动解数独小程序
Jan 21 Python
python 读取二进制 显示图片案例
Apr 24 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
python实现简单反弹球游戏
Apr 12 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
PHP产生随机字符串函数
2006/12/06 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
解析php中curl_multi的应用
2013/07/17 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
浅谈webpack对样式的处理
2018/01/05 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python调用新浪微博API项目实践
2014/07/28 Python
详解Python中for循环的使用方法
2015/05/14 Python
python修改字典内key对应值的方法
2015/07/11 Python
django批量导入xml数据
2016/10/16 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python中Selenium模块的使用详解
2020/10/09 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
python 调用Google翻译接口的方法
2020/12/09 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
通信工程专业女生个人求职信
2013/09/21 职场文书
师范生实习的个人自我鉴定
2013/10/20 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
鼓舞士气的口号
2014/06/16 职场文书
土地租赁意向书
2014/07/30 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
不同意离婚上诉状
2015/05/23 职场文书
Java spring定时任务详解
2021/10/05 Java/Android
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang