前言
最近在网上搜了许多关于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,[4,5,6],[7,8,9]]) In [11]: aa Out[11]: array([[1,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,'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,'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]] -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]] 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,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,[5,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的pandas框架操作Excel文件中的数据教程
- 在Python中利用Pandas库处理大数据的简单介绍
- python中pandas.DataFrame对行与列求和及添加新行与列示例
- Windows下Python使用Pandas模块操作Excel文件的教程
- Python科学计算之Pandas详解
- python中pandas.DataFrame排除特定行方法示例
- Python 中pandas.read_excel详细介绍
- 对pandas的dataframe绘图并保存的实现方法
- python学习教程之Numpy和Pandas的使用
- 利用Python中的pandas库对cdn日志进行分析详解
- 熊猫免费杀毒服务 PandaSoftware
- Python数据分析之真实IP请求Pandas详解
- Python数据分析之如何利用pandas查询数据示例代码
- Python pandas常用函数详解
- Pandas探索之高性能函数eval和query解析
- pandas中Timestamp类用法详解
- python使用pandas实现数据分割实例代码
- python之pandas用法大全
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。