FEATURED · 精选文章

搜遍全网,pandas.DataFrame基础操作组合竟如此耗时调BUG

发布时间 / 2026/9/16 8:18:29
来源 / 创域科博编辑部
栏目 / 资讯中心
搜遍全网,pandas.DataFrame基础操作组合竟如此耗时调BUG 前言这段时间在互联网上查找了好多有关.的操作指南, 全都是些基础的程式, 然而将这些程序组合起来着实比较耗费光阴去准确操作, 耗费了我相当长的时间去修正漏洞。我于此处进行一些归纳, 便利你、我、他。有兴趣的朋友们一同来瞧瞧吧。一、创建的简单操作1、根据字典创造In [1]: import pandas as pd In [3]: aa{one:[1,2,3],two:[2,3,4],three:[3,4,5]} In [4]: bbpd.DataFrame(aa) In [5]: bb Out[5]: one three two 0 1 3 2 1 2 4 3 2 3 5 4字典里的keys是其内部所包含的, 然而这儿并没有index所对应的那个确切的值, 因而这般就需要自行去设定它, 要是并不进行设定的话, 那么其默认的情况便为从数值零开始进行计数。bbpd.DataFrame(aa,index[first,second,third]) bb Out[7]: one three two first 1 3 2 second 2 4 3 third 3 5 42、从多维数组中创建import numpy as np In [9]: del aa In [10]: aanp.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]: bbpd.DataFrame(aa) In [13]: bb Out[13]: 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9从多维数组里进行创建, 那就得为其赋值以及设定index, 不然的话就是默认的那种, 是非常难看的。bbpd.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 93、用其他的创建bbpd.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 ccbb[[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二、的索引操作对于一个来说索引是最烦的最易出错的。1、索引一列或几列比较简单bb[one] Out[21]: 22 1 33 4 44 7 Name: one, dtype: int32于多个列名而言, 需把输入的列名存放进一个列表之中, 如此才算是个变量, 不然便会报错。bb[[one,three]] Out[29]: one three 22 1 3 33 4 6 44 7 92、索引一条记录或几条记录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和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]: Cb.55Dz.cN one two three 22 9 9 3 33 9 9 6 44 9 9 9三、在原有的上新建一个或几个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那列表所赋予的内容, 基本上是依照所给出的索引值顺序来进行赋值操作的, 然而通常情况下, 我们是需要针对对应的索引去做赋值行为的, 要是想要达成更具高级特性的赋值, 那就得看后续的内容了。2、使用字典进行多列按index赋值aa{33:[234,44,55],44:[657,77,77],22:[33,55,457]} In [58]: bbbb.join(pd.DataFrame(aa.values(),columns[hi,hello,ok],indexaa.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这个名称, 而非通常默认的那种命名方式, 如此就达成了依据index进行多列匹配的目标。鉴于dict的储存方式是无序的, 要是在使用dict时不为其index赋予相应的值, 那么记录就会出现混乱无序的状况, 这一点是值得予以着重留意的。四、删除多列或多记录删除列bb.drop([new,hi],axis1) 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],axis0) Out[61]: one two three new hi hello ok 44 9 9 9 4 657 77 77给大伙分享一篇有关中, 对于行以及列进行求和, 还有添加新的行与列的示例, 有兴趣的朋友们能够去瞧瞧。有好多功能尚未涉及, 待往后涉及到, 看过官网的 API 之后, 仍会持续分享, 这样是可以的。总结接下来的这些, 便是这篇文章的全部内容了, 期望本文之中的内容, 能够给大家的学习, 或者工作带去一定的助力, 要是存在疑问, 大家能够留言进行交流, 多谢大伙对我的支持。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻