python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
作者:赤兔DD 发布时间:2021-05-15 16:25:58
前言
最近在网上搜了许多关于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。
来源:http://blog.csdn.net/maliang_1993/article/details/50907983


猜你喜欢
- 函数嵌套和嵌套调用函数的嵌套函数的嵌套:在函数里面还有函数。分为外函数和内函数。嵌套函数是为函数内部服务的,比如减少代码的重复,想要调用函数
- Oracle9i中提供强大的迁移功能,可以从多种数据库向Oracle迁移数据。Oracle新发行的迁移工具提供了从Access2
- strSourceFile = Server.MapPath(dataXML&"/Advertisement/"
- 1、过滤器的用法,用 ‘|' 分割表达式和过滤器。例如:{{ msg | filter}} &nb
- 存储过程,可以这样认为,将我们需要特殊处理的sql语句封装成函数,当需要的时候我们只需调用这个函数就可以实现我们想要的操作,这个过程我们可以
- 如下所示:import requestsurl='http://####'proxy={'http':
- Google网站管理员工具的验证方式有两种,一个是通过html文件,或一种是通过meta标签。通常情况下,这两个方式直接就可以通过验证了。但
- 一、必备插件🌾Chinese(中文)安装后,按快捷键Ctrl+Shift+P,输入configure languageSettings Sy
- mysql 8.0.20 winx64.zip压缩版安装教程记录如下,分享给大家1.下载MySQL官网:链接直接点击链接也可以下载:mysq
- GitHub 无疑是代码托管领域的先行者,Python 作为一种通用编程语言,已经被千千万万的开发人员用来构建各种有意思或有用的项目。以下我
- Python中将列表转换成为数据框有两种情况:第一种是两个不同列表转换成一个数据框,第二种是一个包含不同子列表的列表转换成为数据框。第一种:
- Conv2d的简单使用torch 包 nn 中 Conv2d 的用法与 tensorflow 中类似,但不完全一样。在 torch 中,Co
- 在导入Python模块时,我们可以用import os也可以用from os import *当然,不推荐第二种方法,这样,会导入太多的os
- 查找资料,基本上判断python对象是否为可调用的函数,有三种方法使用内置的callable函数callable(func)用于检查对象是否
- 前言Python爬虫实战,requests模块,Python实现 * 页爬虫让我们愉快地开始吧~开发工具Python版本: 3.6.4相关模
- 本文实例讲述了layer弹窗插件操作方法。分享给大家供大家参考,具体如下:1、首先去http://layer.layui.com/下载插件2
- 项目现状项目是一个数据监测平台,引入了ehcart和three.js 负责项目的数据可视化;打包后,体积高达2.1M,这个体积相比于我的项目
- 单个表的删除:DELETE FROM tableName WHERE columnName = value;删除表内的所有行:即:保留表的结
- 本文实例讲述了Python实现PS滤镜的万花筒效果。分享给大家供大家参考,具体如下:这里用 Python 实现 PS 的一种滤镜效果,称为万
- 先来有用的use 数据库 update news set author='jb51' where author is nul