在家为国做贡献太无聊,不如跟我学点Python人生苦短,我用Python上一篇传送门:小白学Python数据分析(一):数据分析基础小白学Python数据分析(二):Pandas(一)概述小白学Python数据分析(三):Pandas(二)数据结构系列简介DataFrame是由多种类型的列组成的二维标签数据结构形成。简单理解就是类似于Excel和SQL表格的结构。DataFrame是最常用的Pandas对象。和Series一样,DataFrame支持多种类型的输入数据:一维ndarray、list、dictionary,Series字典二维numpy.ndarray结构多维数组或record多维数组。SeriesDataFrame构建DataFrame就像Excel一样,DataFrame有行标签(index)和列标签(columns),可以理解为Excel的行和列。构建DataFrame时,您可以选择传递索引和列参数。这确保生成的DataFrame包含索引或列。注意:Python>=3.6,andPandas>=0.23,当数据为字典且不指定columns参数时,DataFrame的列按照字典的插入顺序排序。在Python<3.6或Pandas<0.23上,并且未指定columns参数,DataFrame的列按字典键的字母顺序排序。Series字典或者字典构造DataFrame先看一个简单的例子:d={'one':pd.Series([1.,2.,3.],index=['a','b','c']),'二':pd.Series([1.,2.,3.,4.],index=['a','b','c','d'])}df=pd.DataFrame(d)print(df)的结果如下:onetwoa1.01.0b2.02.0c3.03.0dNaN4.0通过Series构造DataFrame时,生成的索引(index)是各个Series索引的并集。首先将嵌套字典转换为Series。如果未指定列,则DataFrame的列是字典键的有序列表。这里我们使用字典中的两个字符串一和二作为字典的键,我们字典的键在构造DataFrame时会自动作为它的列(columns)。如果我们在构造DataFrame的时候手动指定索引,那么就会使用我们指定的索引。例子如下:df1=pd.DataFrame(d,index=['d','b','a'])print(df1)结果如下:onetwodNaN4.0b2.02.0a1.01.0如果我们同时指定索引和列,DataFrame也会使用我们指定的索引和列。如果我们指定的索引或列不存在,则默认使用NaN作为Value填充,示例如下:df2=pd.DataFrame(d,index=['d','b','a'],columns=['two','three'])print(df2)结果如下:twothreed4.0NaNb2.0NaNa1.0NaN注意:这里需要注意一点,当指定的列随数据一起传递时字典,传递的列将覆盖字典的键。使用Series构建DataFrame时,DataFrame会自动继承Series的索引。如果未指定列名,则默认列名是输入系列的名称。多维数组字典构建DataFrame首先,多维数组的长度必须相同。如果传入索引参数,则索引的长度必须与数组一致。如果没有传入index参数,会自动按照顺序从0开始生成,例如:d1={'one':[1.,2.,3.,4.],'two':[4.,3.,2.,1.]}df3=pd.DataFrame(d1)print(df3)df4=pd.DataFrame(d1,index=['a','b','c','d'])print(df4)结果如下:onetwo01.04.012.03.023.02.034.01.0onetwoa1.04.0b2.03.0c3.02.0d4.01.0列表字典构造DataFramed2=[{'a':1,'b':2},{'a':5,'b':10,'c':20}]df5=pd.DataFrame(d2)print(df5)df6=pd.DataFrame(d2,index=['first','second'],columns=['a','b'])print(df6)结果如下:abc012NaN151020.0abfirst12second510-tupledictionarybuildingaDataFrametupledictionary可以自动创建多层索引DataFrame。d3=({('a','b'):{('A','B'):1,('A','C'):2},('a','a'):{('A','C'):3,('A','B'):4},('a','c'):{('A','B'):5,('A','C'):6},('b','a'):{('A','C'):7,('A','B'):8},('b','b'):{('A','D'):9,('A','B'):10}})df7=pd.DataFrame(d3)print(df7)结果为如下:abbacabAB1.04.05.08.010.0C2.03.06.07.0NaNDNaNNaNNaNNaNNaN9.0抽取、添加、删除DataFrame创建后,我们自然希望对其进行动态操作,因此标准的CRUD操作必不可少。获取数据的例子如下,这里使用df4进行演示:Extract#获取数据print(df4)#按列获取print(df4['one'])#按行获取print(df4.loc['a'])print(df4.iloc[0])df4['three']=df4['one']*df4['two']df4['flag']=df4['one']>2print(df4)The结果如下:onetwoa1.04.0b2.03.0c3.02.0d4.01.0a1.0b2.0c3.0d4.0Name:one,dtype:float64one1.0two4.0Name:a,dtype:float64one1.0two4.0Name:a,dtype:float64onetwothreeflaga1.04.04.0Falseb2.03.06.0Falsec3.02.06.0Trued4.01.04.0TrueDelete#删除数据deldf4['two']df4.pop('three')print(df4)结果如下如下:一个flaga1.0Falseb2.0Falsec3.0Trued4.0True添加一个标量值用于插入,所有列都会被插入,如下:#Insertdatadf4['foo']='bar'print(df4)结果如下遵循一个标志fooa1.0Falsebarb2.0Falsebarc3.0Truebard4.0当Truebar插入到与DataFrame索引不同的Series中时,DataFrameindex为准:df4['one_trunc']=df4['one'][:2]print(df4)结果如下:oneflagfooone_trunca1.0Falsebar1.0b2.0Falsebar2.0c3.0TruebarNaNd4.0TruebarNaN可以插入到原生的多维数组中,但是长度必须和DataFrame索引的长度一致。您可以使用insert方法插入数据。默认情况下,该列插入到DataFrame的末尾,但您可以手动指定插入列的位置,从0开始计算,示例如下:df4.insert(1,'bar',df4['one'])print(df4)结果如下:onebarflagfooone_trunca1.01.0Falsebar1.0b2.02.0Falsebar2.0c3.03.0TruebarNaNd4.04.0TruebarNaN示例代码都是老规矩,都是示例代码会上传到代码管理仓库Github和Gitee,方便访问。示例代码-Github示例代码-Gitee参考https://www.pypandas.cn/docs/...如果我的文章对你有帮助,请扫码关注作者的公众号:获取最新干货推送:)
