python数据分析 |
您所在的位置:网站首页 › pandas库python36 › python数据分析 |
Pandas全面介绍及使用
1 Pandas 的介绍和安装2 Pandas中Series的数据结构介绍2.1 Series的介绍2.2 Series的创建2.3 Series的索引与切片2.3.1 Series的索引与值2.3.2 Series的索引与切片
2.4 Series 的运算
3 Pandas中DataFrame的数据结构介绍3.1 DataFrame介绍3.2 DataFrame创建3.3 DataFrame基础操作3.4 DataFrame的增删改查3.4.1 DataFrame的查3.4.3 DataFrame的增3.4.4 DataFrame的删
3.5 DataFrame的合并3.5.1 pd.concat3.5.2 df.append3.5.3 pd.merge3.5.4 df.join
1 Pandas 的介绍和安装
(1)为什么会有Pandas? Pandas支持大部分Numpy语言风格,尤其是数组函数与广播机制的各种数据处理。但是Numpy更适合处理同质型的数据。而Pandas的设计就是用来处理表格型或异质型数据的,高效的清洗、处理数据。 (2)Pandas是什么? Pandas是基于Numpy的一种工具,提供了高性能矩阵的运算,该工具是为了解决数据分析任务而创建的。也是贯穿整个Python数据分析非常核心的工具。 (3)Pandas涉及内容 Series是一种一维的数组型对象,它包含了一个值序列(values),并且包含了数据标签,称为索引(index),本质相当于一列数据。 2.2 Series的创建语法:pd.Series(data=None,index=None,dtype=None,name=None,copy=False) data:创建数组的数据,可为array-like, dict, or scalar valueindex:指定索引dtype:数组数据类型name:数组名称copy:是否拷贝注意:data可为iterable, dict, or scalar value """data为iterable""" s1 = pd.Series([1,2,3,4],index=['a','b','c','d'],name='example') print(s1) """注意1:pandas里面索引是可重复的""" s2 = pd.Series([1,2,3,4,5],index=list("aacde")) print(s2) """注意2:索引的个数与data的个数是否要一致?index与values的个数必须一致""" # s3 = pd.Series([1,2,3,4,5],index=list("aabcde")) # print(s3) # 报错 """data为字典,key对应索引,value对应值""" dic1 = {"name":"steven","age":18,"gender":"male"} s4 = pd.Series(dic1) print(s4) # 构建索引列表 dic2 = {"name":"steven","age":18,"gender":"male"} index_li = ["class","name","gender"] s5 = pd.Series(dic2,index=index_li) # 以index指定的索引列表为主 class 在dic2 中没有,以nan形式填充 print(s5) """data为向量scalar""" s6 = pd.Series(np.random.randint(1,10,size=5),dtype="float") print(s6) # 查看类型除此之外,Pandas可以使用Numpy的数组函数 s.dtype :查看数据类型s.astype():修改数据类型s.head(n) :预览数据前5条s.tail(n) :预览数据后5条但是如果需要显示所有数据,则需以下代码。但并不建议使用 `#显示所有列 pd.set_option('display.max_columns', None) #显示所有行 pd.set_option('display.max_rows', None) #设置value的显示长度为100,默认为50 pd.set_option('max_colwidth',100) 2.3 Series的索引与切片 2.3.1 Series的索引与值 s.index : 查看索引s.values:查看值序列s.reset_index(drop=False):重置索引drop :是否删除原索引 默认为否注意 :索引对象是不可变的,所以不能单个修改索引 s1 = pd.Series(np.arange(5)) s2 = pd.Series(['a','b','c'],index=['A','B','C']) print(s1,s2) print(s1.index,type(s1.index),s2.index,type(s2.index)) print(s1.values,type(s1.values),s2.values,type(s2.values)) # 获取索引A 注意:不是s2["A"] 这样是取值的 print(s1.index[1]) print(s2.index[1]) # print(s2.index['A']) # 报错 # 是否可以修改单独的索引? # s2.index[1] = "D" # 报错:注意:索引对象是不可变的,为了更安全 2.3.2 Series的索引与切片 s[‘标签’]: 通过标签s[‘索引’] :通过索引s.loc[标签] : 通过标签s.iloc[索引]:通过索引 s1 = pd.Series(np.arange(1,6),index=list("abbde")) print(s1) # 取2 print(s1["b"],'\n','----------------') # 通过标签 print(s1[1],'\n','----------------') # 通过索引 print(s1.loc["b"],'\n','----------------') # 通过标签 print(s1.iloc[1],'\n','----------------') # 通过索引 # 查看 "a","d" print(s1[["a","d"]],'\n','----------------') # 通过标签 print(s1[[0,3]],'\n','----------------') # 通过索引 # 取大于3的值 布尔索引 print(s1[s1>3],'\n','----------------') # pandas 会根据数据类型 自动的处理缺失数据 data = ["a","b",None] print(pd.Series(data),'\n','----------------') # object data = [1,2,None] print(pd.Series(data),'\n','----------------') # np.nan 浮点类型 float64 2.4 Series 的运算 共同索引对应为运算,其它填充NaN没有共同索引时,则全部为NaN """共同索引对应为运算,其它填充NaN""" s1 = pd.Series(np.arange(10,20),index=range(10)) s2 = pd.Series(np.arange(20,25),index=range(5)) print(s1,'\n','----------------') print(s2,'\n','----------------') print(s1+s2,'\n','----------------') """没有共同索引时,则全部为NaN""" s3 = pd.Series(np.arange(5),index=range(5)) s4 = pd.Series(np.arange(5,10),index=range(5,10)) print(s3,'\n','----------------') print(s4,'\n','----------------') print(s3+s4,'\n','----------------') 3 Pandas中DataFrame的数据结构介绍 3.1 DataFrame介绍DataFrame表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值,字符串,布尔值)。在DataFrame中,数据被存储为一个以上的二维块。 pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False) data:创建数组的数据,可为ndarray, dictindex:指定索引dtype:数组数据类型copy:是否拷贝 d1 = pd.DataFrame(np.random.randint(1,100,size=(3,3))) print(d1,'\n','-------------------------------------------------') """ 行索引 index 0轴 axis=0 列索引 columns 1轴 axis=1 值 values """ print(d1.index,'\n','-------------------------------------------------') # RangeIndex print(d1.columns,'\n','-------------------------------------------------') # RangeIndex print(d1.values,'\n','-------------------------------------------------') # ndarray的二维数组 # 指定index 为["amy","mia","steven"] # 指定columns 为["java","python","R"] d2 = pd.DataFrame(np.random.randint(1,100,size=(3,3)),index=["amy","mia","steven"],columns=["java","python","R"]) print(d2,'\n','-------------------------------------------------') """ 字典形式的data(同Seires) - key值为列索引 - value为值 - 行索引 不指定就为默认的 """ data = { "name":["amy","mia","steven"], "lesson":["java","python","R"] } d3 = pd.DataFrame(data) print(d3,'\n','-------------------------------------------------') # 指定一下列索引 d4 = pd.DataFrame(data,columns=["lesson","name"]) print(d4,'\n','-------------------------------------------------') # 以我们指定的columns为主 d5 = pd.DataFrame(data,columns=["lesson"]) print(d5,'\n','-------------------------------------------------') # 以我们指定的columns为主 指定的 多于 data的key值时,则会填充nan d6 = pd.DataFrame(data,columns=["lesson","name","age"]) # age 不存在,填充为nan print(d6,'\n','-------------------------------------------------') # 字典数据结构不一致的 也会补齐为nan data1 = [ {"name":"amy","age":18,"gender":1}, {"name":"jun","age":20}, {"name":"hy","gender":1} ] d7 = pd.DataFrame(data1) print(d7,'\n','-------------------------------------------------') """ 重置索引: 除了创建时可以指定,我们创建后还可以通过df.reindex()进行重置索引 语法:df.reindex(index=None, columns=None, axis=None,fill_value=nan) """ df = pd.DataFrame(np.arange(9).reshape(3,3),index=list("abc"),columns=list("ABC")) print(df,'\n','-------------------------------------------------') # 重置行索引 df1 = df.reindex(index=[1,2,3]) # 如果重置的索引 与 df中指定的index 无关系 则全部填充nan print(df1,'\n','-------------------------------------------------') df2 = df.reindex(index=["b","c","a"]) # 如果重置索引与df指定的索引 完全一致 但是乱序的话 根据重置索引变动 print(df2,'\n','-------------------------------------------------') df3 = df.reindex(index=["b","c","a","d"]) # 如果重置索引 比 df指定的索引 多 则多出的部分填充nan print(df3,'\n','-------------------------------------------------') # 填充列索引 df4 = df.reindex(columns=list("BCA")) # 跟行索引一样的本质一样,有就排序,没有就填充nan print(df4,'\n','-------------------------------------------------') # 同时重置 df5 = df.reindex(index=list("bca"),columns=list("CBA")) print(df5,'\n','-------------------------------------------------') 3.3 DataFrame基础操作 df.shape :查看数组形状,返回值为元组df.dtypes :查看列数据类型df.ndim :数据维度,返回为整数df.index :行索引df.columns :列索引df.values :值d.head(n) :显示头部几行,默认前5行d.tail(n) :显示末尾几行,默认后5行d.info() :相关信息概述 data = [ {"name":"amy","age":18,"tel":10086}, {"name":"bob","age":18}, {"name":"james","tel":10086}, {"name":"zs","tel":10086}, {"name":"james","tel":10086}, {"name":"ls","tel":10086}, ] d1 = pd.DataFrame(data) print(d1,'\n','-------------------------------------------------') print(d1.shape,'\n','-------------------------------------------------') # 查看数组形状 (6,3) 六行三列 二维的 print(d1.ndim,'\n','-------------------------------------------------') # 查看数组维度 df为二维的 print(d1.dtypes,'\n','-------------------------------------------------') # 查看列的数据类型 注意:每列的类型可以不一致 体现pandas更加灵活 print(d1.head(),'\n','-------------------------------------------------') # 显示前几行 默认为5 print(d1.tail(),'\n','-------------------------------------------------') # 显示末尾几行 默认为5 print(d1.info(),'\n','-------------------------------------------------') # 描述信息概要 Non-Null Count:非NAN数据的次数 3.4 DataFrame的增删改查 3.4.1 DataFrame的查 直接使用索引与标签![]() ![]() 语法:df = pd.concat(objs, axis = 0, ignore_index = False, join = "outer (1)concat是”contatenate"的缩写,指的是多表之间的“拼接”。事实上“拼接”和“合并”还是有区别的,拼接一般是上下,合并时左右。 (2)参数解释: objs: 指的是要合并的dataframe(们)。可以是一个列表[df1,df2,…]也可以是一个集合(df1,df2,…)。axis:指的是拼接的方向。axis = 0指的是拼接行(向下拼接),axis = 1指的是拼接列(向右拼接)。ignore_index: 指的是拼接后是否忽视原df各自的索引。比如,假如我们按行拼接,原来df1中有五条数据,索引是0,1,2,3,4。原来的df2中也有五条数据,索引也是0,1,2,3,4。如果我们在合并时,将ignoreindex的值设为False,那么拼接后df的索引就是0,1,2,3,4,0,1,2,3,4。那么如果将ignore_index的值设为True, 那么拼接后df的索引就是0,1,2,3,4,5,6,7…join:表示“如何拼接”。由于两表中的信息可能是不同的,所以要设置这个参数以表明拼接方式。其中,outer表示取并集,inner表示取交集。 举例来看一下吧 df1 = pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('abc')) df2 = pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('def')) print(df1,'\n','--------------------------------------------') print(df2,'\n','--------------------------------------------') # df3 = pd.concat([df1,df2],axis=0) # df3 df4 = pd.concat([df1,df2],axis=1,ignore_index=False) df4 3.5.2 df.append语法:df = df1.append(df2) append可以视作axis=0的,简便版的concat。也就是说,它只支持行拼接,同时比concat简便一些。 这里要注意和concat的用法区别。concat是pd的属性,所以调用的时候应该是pd.concat((df1,df2)),而append是对df的方法,所以调用的时候是df1.append(df2) df1 = pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('abc')) df2 = pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('def')) print(df1,'\n','--------------------------------------------') print(df2,'\n','--------------------------------------------') df3 = df1.append(df2) df3 3.5.3 pd.merge语法:df = pd.merge(left, right, how = "inner",on = "None") 与concat(拼接)不同,merge才是真正意义上的”合并“。 拼接和合并的区别在于,拼接只是简单地”堆“在一起,而合并则是基于某一个”主键“将两个表”合“在一起。事实上merge也有很多参数,这里只列了最常用的。其中:参数解释: (1)left: 左表。也就是第一个df。 (2)right:右表。也就是第二个df。 (3)how: 和concat里面的"join"类似,表示“如何合并两表。除了”inner“和”outer“以外,merge中还有”left"(基于左表进行合并)和“right”(基于右表进行合并)。具体地:1)left: 只使用左表的键。2)right:只使用右表的键。3)inner: 使用左右表键的交集。4)outer:使用左右表键的并集。 (4)on: 表示按照哪一个键来进行合并 df1= pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('abc')) df2 = pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('def')) print(df1,'\n','--------------------------------------------') print(df2,'\n','--------------------------------------------') df3 = pd.merge(df1,df2,how='outer',left_index=True,right_index=True) df3 3.5.4 df.join语法:df = left.join(right,on = "key", how = "left") 类似于append之于concat,join也可以被理解为merge的一个简便并且特殊的方法。join也可以设置参数"how",只不过这里默认值不同。Merge中,how的默认值是”inner“,join中的默认值为”left"。 df1= pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('abc')) df2 = pd.DataFrame(np.arange(12).reshape(4,3),index=range(0,4),columns=list('def')) print(df1,'\n','--------------------------------------------') print(df2,'\n','--------------------------------------------') df3 = df1.join(df2,how='right') df3 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |