Python-零基础学习Pandas知识点整理

       写在前面,我也是一名python学习小白,从最近开始学习Python,由于之前没有编程基础,学习起来比较费劲,大部分时间都是从网上看写教学视频,一边学习,一边操作。但是大部分情况都是学完就忘,真正让自己写代码时,又总是依赖百度,进步很慢,最近也在通过学习Python的数据处理包-pandas,分享一些自己在实际学习过程中练习的一些代码,由于是类似比较,所以会有很多注释,帮助自己记忆的。【代码内容是可以直接复制到Pycharm中直接运行的】 ---如需转载,请注明出处,谢谢。

请关注我的知乎:Pandas学习总结

import pandas as pd

import numpy as  np

第一部分:Pandas -Series数据处理

#pd.Series(data=list,index=[ ],name=”“) 创建:

#通过字典创建:

dic={"a":[1,2,3],"b":[4,5,6],"c":[7,8,9]}

s1 = pd.Series(data=dic,name="Random_num")  #通过字典来创建Series,字典的Key为index(由于dict中key值不允许重复,所以不会有重复index),value为Series的value

#通过字典创建Series也可以指定index,如果指定的index与字典中key不一致,则会按照指定的index进行添加,value值会填充为NaN

#通过列表创建:

list1=[1,2,3,4]

s2 = pd.Series(data=list1,index=["a","e","f","g"],name="Random")  #通过列表来创建Series,可以指定index(可以重复),如果不指定默认按0-整数作为index

#获取Series的name

s1.name

#获取Series的index

s1.index

#Series中增加数据:append(to_append,ignore_index=False)  to_append为字典或Series,添加后不会改变原Series的内容。

#通过Series或dict来增加

s3 = s1.append(s2,ignore_index=True)  #默认为False,添加什么就显示什么。 True表示为添加后的Series重新进行赋index值0-

s3 = s2.append(pd.Series({"h":45}))  #其实括号中的字典已经被转换成Series再添加,所以append添加Series也是只能添加Series类型。

#向Series中添加other对象,add(other, level=None, fill_value=None, axis=0)

#使用add添加对象时,Series中必须为数字类型,否则会报错。

s2.add(5)  #就是在s2中每个value值都增加5。

s4= s3.add(s2,fill_value=10)  #如果两个Series有相同的index,那么相同的index的值会直接相加,不同的index会以fill_value指定的值填充。

#需要注意: fill_value=10 表示两个Series值进行相加时,如果index不匹配,会取两者的并集,没有的那个Series先讲值进行填充为指定fill_value值,然后再两者相加

#也就是说,两个不同长度的Series相加时,会先将两者的长度对其,缺失值填充NaN,然后再进行相加,NaN+数字 =NaN  所以也就能理解s4["d"]的值为55了。

#Series中数据的选择: get(key,default=None)  如果获取多个值,以列表的形式提供

s3.get("e")  #之间通过index得到对应的值

s3.get(["a","e"],66)  #如果index中没有值,则会输出指定的值default = 66

#Series中通过切片取值: 切片取值后的值仍为Series,如果是单个中就是value了。

type(s3[0])

s3[0:2]

# Series中相加运算。

#对于均为数字类型的Series,两Series进行相加时,相同的index会进行相加,不同的index按照NaN值进行填充。

#NaN属于float类型,表示缺失数据,可以参与运算。

s5 = s2+s3

# Series中缺失值操作

s1.notnull()  #判断Series中是否存在缺失值,不是空值(也就是不为NaN)返回True,为空值(就是为NaN)返回False。

s5.isnull()  #判断Series中是否存在空值,返回的时Series对象的布尔值。不为空,返回False,为空值,返回True。

#该操作可以在Series中对数据进行筛选操作,例如:

s5[s5.isnull()]  #筛选出s5中为空值的行(数值),同样也适用在对DataFrame的操作中。

s5[s5.notnull()]  #筛选出s5中不为空值的行(数值)。

#Series中缺失值的填充

s5.fillna(6)  # 就是将s5中的NaN值填充为6

#Series中缺失值的删除

s5.dropna(inplace=True)  #对于Series,直接就是删除NaN的值,返回的是删除NaN后的Series,但是原来的Series不会改变。

#如果指定了inplace = True 则原来的Series会改变,默认inplace=False

#Series中对数据的去重操作

s5.unique()  #去除Series中的重复值,返回元素的唯一值。

s5.nunique()  #返回s1的唯一值的个数,返回的是单个值。

s5.fillna(77)

#统计Series中值出现的次数

s5.value_counts()  #统计Series中的值出现的次数。

#判断某值是否存在Series中

s5.isin([4,5,6,7])  #判断Series是否存在[4,5,6,7]这个列表中,返回对应的bool类型Series。

#对Series中数据按照值的顺序进行排序

s5.sort_values(ascending=False,inplace=False,na_position="last")  #对于Series按照值排序不需要指定by 和axis 的值。

#对Series中按照索引的顺序进行排序

s5.sort_index(level=None,ascending=True,inplace=False,na_position="last")  #对于Series参数axis是不需要的。by参数不建议使用。

# Series系列对象属性

# Series.inddex #返回Series的index对象

# Series.shape  #返回Series的形状元组

# Series.dtype  #返回Series的数据类型

# Series.size  #返回Series的数据大小,数据的个数

# Series.ndim  #返回数据中的维数

第二部分:Pandas - DataFrame数据处理

#pd.DataFrame的创建: pd.DataFrame(data= , index=[] ,columns=[],dtypes="int")

#通过字典进行创建

dict1 = {"a":[1,2,3],"b":[4,5,6],"c":[7,8,9],"d":[10,11,12]}

df = pd.DataFrame(data = dict1,index=[3,4,5],columns=["b","a","c","d"])  #通过dict进行创建DataFrame时,不需要指定columns,如果指定的columns值与dict的Key不一致时,会填充NaN的值。

#通过numpy创建

df1=pd.DataFrame(np.random.randint(3,8),columns=["a","b","c"],index=[1,2,3])

#通过读取csv/txt/excel文件进行创建  pd.read_excel("文件路径+文件名+扩展名",encoding ="gbk",index_col=0,skiprows=[1],header = None )

#index_col 指定行索引的列

#header 指定列索引的行,默认header = 0

#usecols 指定只使用那些列,默认为None,全部使用

#skiprows 指定跳过哪些行

#dtype #设置列的类型,一般可以通过字典来进行设置,如 dtype = {"列名":"类型"}

#sheet_name = 0 #表示读取excel中的哪张表,可以写表的名字,也可以写index索引,0代表第一张表,1代表第二张表

df3 = pd.read_csv(r"C:\Users\11764\Desktop\DataAnalyst.csv",encoding="gbk")

df3

#DataFrame属性:

df.columns  #以index形式,返回df的列名称,因此可以通过修改列名,df.columns=list[] ,可以对列名进行修改

#还可以通过rename的方法对columns进行修改,df.rename(columns={"A":"B"},inplace = True) 将A列的名称更改为"B"

df.index  #以index形式,返回df的索引

df.shape  #返回df的形状(几行几列)  df.shape[0] 返回df的行数  df.shape[1] 返回df的列数

df3.size  #返回df的数据个数 几行*几列的值

df.values  #以数组的形式,返回df的值

df.dtypes  #以Series形式返回df的中每列数据的类型

df.ndim  #以数字的形式返回df的维度

df.T      # 将df进行转置,将数据的行变成列,将列变成行

df.info()  #查看表中数据的类型

# DataFrame 数据选择

#df[] 默认是对列进行选择,如果需要选择对应行列中的值,需要先选择列,再选择行。即df["columns"]["index"]  否则会报错。  输入参数的位置是:先列后行

'''后续可以通过df["new_columns"]= list[]  来新增列。'''

df[1:5]  #选取1:4行的数据

df["a"]  #选择columns=3的列,  df[] 只有一个参数是默认是选择列

df[["a","b"]]  #选择的是不连续的两列

# df["b":"c"] #选择的是连续的列

df[1:3]  #选择的是第2行到第3行的值,不包括第4行

df[:]    #表示选择所有的行

df[:2]  #表示选择前两行的值

df["a"][3]  #表示选择"a" 列中对应的index=3 的值。  #建议在进行设置index值时,不要选择整型作为新的index,本来默认为整型,容易形成混淆。

# 此时的3 表示index值为3,与实际参数位置3有明显区别,也就是使用整型做index 的弊端。

#通过loc 和iloc 进行取值

#loc 是根据行列标签来进行选择.  需要取多列,将多列的标签放在列表[]中。 输入参数的位置是:先行后列

# df.loc[]  如果只有一个参数,默认是选择行的。 需要注意:与df[] 只有一个参数默认是选择列的。

df.loc[3]  #选择index=3对应的行。

''' 后续可以通过df.loc["new_index"] = list[] ,该方式对DataFrame新增行。'''

df.loc[:]  #表示选择所有的行

df.loc[3,"a"]  #表示取index=3的行对应"a"列对应的值。

df.loc[:,"a"]  #表示取"a" 列的所有值。

df.loc[3,:]  # 表示取index=3 对应行的所有值。

#iloc 是根据行列的位置来进行取值的。  如果只有一个参数,则默认选择取行。  输入参数的位置是: 先行后列

df.iloc[2]  #选择位置参数为2(对应第3行)的数据。

df.iloc[[1,2]]  #表示选择第2行和第三行的数据。

df.iloc[1,2]  #表示取第2行和第3列对应的数值

df.iloc[[1,2],[1,2]]  #表示取第2行和第3行,对应的第2列和第3列的数据。

''''

数据选择总结:

df.loc[2],df.iloc[1]  只有一个参数表示是对行进行选择。

默认情况下 df[] 只能通过columns进行列选择,不能进行行选择,如果含有行号和区间,如df[:2] 是可以进行行选择。

df.columns  表示选择的columns这列,等价于 df["columns"]

'''

#DataFrame 数据的预处理-行列操作

#df.pop(item)  #itme 指列标签,表示指定删除的列,并弹出删除列的值。不能作用于行

df.pop("a")  #删除df中的对应的"a" 列,原df数据会被改变。

#df.get(key,default=None)  key表示指定的列索引标签,如果df中有列索引,则返回该列的值,没有的话返回default的值。

df.get("b")

#df.insert(loc,column,value,allow_duplicates=False)  在df的指定位置插入一列。  不能作用于行。

''' loc 以int表示,表示插入列的位置,0

column 以str,number,object  表示插入列的标签

value 以int,Series,array-like 表示插入列的值

allow_duplicates 以bool类型表示,如果原df中有对应标签,True表示允许一样,False表示不能一样。'''

df.insert(2,"k",[15,13,17])

#对df中行或列数据进行排序。

# df.sort_values(by="" ,axis=0,ascending =True,inplace =False,na_position='last',ignore_index=False)

'''by=""    指定行索引名(“index”)或者列索引(“cloumns”),参数需要以列表[]的形式进行提供。

axis=0/1  若axis=0或"index"按照指定列中数据大小进行排序,若axis=1或"columns",则按照指定行索引中数据大小进行排序,默认axis=0

ascending=True/False  是否按照指定列进行升序排序,默认为True,即升序排列。

inplace=True/False  是否使用排序后的数据集更替原来的数据集,默认为False,即不替换。

na_position="frist" 或“last”  设置缺失值的显示位置。'''

df.sort_values(by=[3],axis=1)  #表示按照index=3 对列进行排序,axis=1 表示跨行操作,也就是横向排序

df.sort_values(by=["b"],axis=0)  #表示按照列名"a",对行进行排序,axis=0 表示跨列操作,也就是纵向排序

df["b"].sort_values()  #表示的是对“a“ 列的数据进行值排序,返回的是"a" 列数据排序后的Series。

# 对df中的数据按照index进行排序

#sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)

'''

axis:0按照行名排序;1按照列名排序

level:默认None,否则按照给定的level顺序排列---貌似并不是,文档

ascending:默认True升序排列;False降序排列

inplace:默认False,否则排序之后的数据直接替换原来的数据框

kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。

na_position:缺失值默认排在最后{"first","last"}

by:按照某一列或几列数据进行排序,但是by参数貌似不建议使用

'''

df.sort_index(ascending=False)  # axis 按照指定的行或列进行排序。

#对DataFrame中的数据设置索引值,也就是指定某一列作为列索引。

#df.set_index(keys,drop=True,append=False,inplace=False,verify_integrity=False)

'''

drop:默认为True,删除用作新索引的列

append:是否将附加到现有索引,默认为False  ##通俗来讲,就是设置后的索引是否与原来的索引同时存在,True表示现索引和原索引同时并存

inplace:输入布尔值,表示当前操作是否对原数据进行修改,默认为False

verify_integrity :检查新索引副本。默认为False

'''

df.set_index("k")

#对df中将设置的索引回复到默认的索引值,与set_index 构成反向操作。

# df.reset_index(level=None,drop=False,inplace=False,col_level=0,col_fill=" ")

'''

将原来设置为索引的列进行还原,新的索引列默认填充,设置索引列的列回到df数据中,如果drop=True,则设置为索引列的列会被丢弃。

简单理解就是通过set_index 设置的df的index,现在又不想用了,可以直接df.reset_index(),又回到原来的默认值了

Level :当指定数值类型可以为int,str,tuple或list,默认为None(无)

Drop:当指定drop=False时,则索引列会被还原为普通列,否则为True时,经设置后的新索引值会被丢弃,默认为False。

inplace:True/False 表示当前操作是否对原数据生效,默认为False

Col_level :数值类型为int或str,默认值为0,如果列有多个级别,则确定将标签插入到哪个级别,默认情况下将插入到第一级。

Col_fill:对象,默认“ ”

'''

df.reset_index()

#将已有的df中的index或columns设置成自定义的index或columns,如果新设置的index或columns在原df中存在,会对原df进行且切片,否则会对应的值填充NaN值。

#df.reindex(labels=None,index=None,columns=None,axis=None,method=None,copy=None,level=None,fill_value=nan,limit=None,tolerance=None)

df.reindex(labels="a",index=[1,2,3]) #如果指定了index=[] ,就不需要再传入axis参数了。

#修改原df的index或columns名

'''

简单理解就是原来的df的index和column已经有了默认名称,现在我想重新修改名称,我可以只修改几个名称,或者觉得index或columns中有些名称不想要,

想改,可以通过字典形式进行映射修改,但是修改后的df的维度不会发生改变,不会像reindex那样可以新增或者切片。

但是rename修改名称时,index或columns需通过字典值映射。index={"原名":"新名"},columns={"原名":"新名"}

'''

df.rename(index={3:6},columns={"k":"g"})  #将df中的index索引3修改为6,将columns中"k"修改成"g"。

          【内容持续更新...如果觉得对你有帮助,帮忙点个收藏和关注,谢谢!】

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