Pandas——DataFrame

https://blog.csdn.net/haruhi330/article/details/60872526

pandas.DataFrame 的操作简单经验(创建,索引,增添,删除)

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

一创建DataFrame的简单操作:

1.根据字典创造:


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

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

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

2.从多维数组中创建

import numpy as np
 del aa
 aa=np.array([[1,2,3],[4,5,6],[7,8,9]])
 aa
 array([[1, 2, 3],       [4, 5, 6],       [7, 8, 9]])
 bb=pd.DataFrame(aa)
 bb
    0  1  20  1  2  31  4  5  62  7  8  9

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

 bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])
 bb
     one  two  three22    1    2      333    4    5      644    7    8      9

3.用其他的DataFrame创建

bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])bb
     one  two  three22    1    2      333    4    5      644    7    8      9cc=bb[['one','three']].copy()Cc
     one  three22    1      333    4      644    7      9

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

cc['three'][22]=5bb
     one  two  three22    1    2      333    4    5      644    7    8      9 cc
     one  three22    1      533    4      644    7      9

二.DataFrame的索引操作:

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

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

bb['one']
 22    133    444    7Name: one, dtype: int32

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

bb[['one','three']]
     one  three22    1      333    4      644    7      9

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

bb[1:3]
     one  two  three33    4    5      644    7    8      9bb[:1]
     one  two  three22    1    2      3

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

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

第一种

bb.loc[[22,33]][['one','three']]
     one  three22    1      333    4      6

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

bb.loc[[22,33]][['one','three']]=[[2,2],[3,6]]
 bb
     one  two  three22    1    2      333    4    5      644    7    8      9

第二种:也是只能看

bb[['one','three']][:2]
     one  three22    1      333    4      6

想要改变其中的值就会报错。


 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 insteadF:\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]
     three44      9 bb.iloc[1:3,1:3]
     two  three33    5      644    8      9bb.iloc[0,0]
 1

下面是证明:

 bb.iloc[0:4,0:2]=[[9,9],[9,9],[9,9]]
 bb
     one  two  three22    9    9      333    9    9      644    9    9      9

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

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

bb['new']=[2,3,4]bb
     one  two  three  new22    9    9      3    233    9    9      6    344    9    9      9    4bb[['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]}
 bb=bb.join(pd.DataFrame(aa.values(),columns=['hi','hello','ok'],index=aa.keys()))
 bb
     one  two  three  new   hi  hello   ok22    9    9      3    2   33     55  45733    9    9      6    3  234     44   5544    9    9      9    4  657     77   77

这里aa是一个字典和列表的嵌套,相当于一条记录,使用keys当做index名而不是一般默认的columns名。达到了按index多列匹配的目的。由于dict()储存是混乱的,之间用dict()而不给他的index赋值会记录错乱,这一点注意值得注意。

四、删除多列或多记录:

删除列

bb.drop(['new','hi'],axis=1)
     one  two  three  hello   ok22    9    9      3     55  45733    9    9      6     44   5544    9    9      9     77   77

删除记录

bb.drop([22,33],axis=0)
     one  two  three  new   hi  hello  ok44    9    9      9    4  657     77  77

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容