郑州网站建设专业公司,网络服务提供者对在业务活动中收集的公民个人电子信息,数据网站,wordpress建设软件下载站pandas有两类数据对象#xff1a;dataframe和series。Series是一个带标签的一维数组#xff0c;通常索引在左#xff0c;值在右。dataframe是一个带标签的二维数组#xff0c;可以理解成series的字典#xff0c;共用索引标签。重点记录dataframe的相关用法#xff1a;一.…pandas有两类数据对象dataframe和series。Series是一个带标签的一维数组通常索引在左值在右。dataframe是一个带标签的二维数组可以理解成series的字典共用索引标签。重点记录dataframe的相关用法一.创建dataframe1.如下图所示主要是要Dataframe方法结合numpy函数可快速创建以下演示了三种不同的创建方法#1.创建dataframe格式import pandas as pdimport numpy as npdf1pd.DataFrame(np.random.randn(4,4),indexnp.arange(4),columnslist(ABCD))df2pd.DataFrame(np.arange(16).reshape(4,4),index[1,2,3,4],columns[A,B,C,D])df3pd.DataFrame({A:1,B:2,C:pd.date_range(20200201,periods4),D:pd.Series(1,index[1,2,3,4])})打印结果二.查看数据#查看数据df1.head(1) #1查看头部第一行数据df1.dtypes #2查看列类型df2.columns #2查看列名df2.to_numpy() #3用numpy方法快速查看数据df2.describe() #4查看统计摘要df2.T #5行列互换转置df2.sort_index(axis1,ascendingFalse) #6按列轴大小排序df2.sort_values(byB) #7按列的B轴数值大小排序1.首尾数据head()/tail()df1.head(1) / df1.tail(2)2.显示索引、列名、列类型df1.index / df1.columns / df1.dtypes个人觉得查看列类型在数据清洗中应该会用的比较多image3.查看列表数据:df2.to_numpy()可以快速浏览dataframe对象中底层numpy数据以numpy格式输出4.查看统计摘要describe()包含NAN值统计概要以描述数据离散和形状。其中表示所在列的count数量mean为均值std为标准差min最小值max:最小值20%、50%、75%为20、50、75的百分位数50%也可以理解为中位数。image5.转置数据df2.T 行列数据互换image6.按轴排序df1.sort_index(axis1,ascendingFalse)即将表格的数据按照行、列轴上数值的大小排序后展示当axis1时表示按照列轴排序axis0时表示按照行轴排序ascending为False表示按照倒序排列。image7.按值排序df2.sort_values(byB)表示按照B轴的数值大小排序默认为正序可通过ascending设置倒序image三.筛选数据1.按列筛选筛选整列df2[A] df2.A 筛选两列df2[[A,D]]2.按切片筛选(按行筛选)筛选行数据df2[:2] 它与标签筛选的区别在于不包含该结束点如本例只包行0,1的行的数据不包含2的数据。 而标签会包行节点数据。#按列和切片筛选数据df2[A] #1.按筛选列A的数据df2[[A,D]] #1.按筛选列A、D的数据print(df2[2:3]) #2.按索引行位置2的筛选数据print(df2.loc[2:3])#3.用loc标签按索引行位置2、3筛选数据image3.按标签筛选(按行筛选)筛选行数据df2.loc[2:3]筛选某几行某几列数据df2.loc[2:3,[A,B]]返回降维数据df2.loc[1,[A,B]]提取标量值df2.loc[index2[0],A]其中可以将index理解为一个series。#按标签筛选print(df2.loc[2:3,[A,B]]) #3.用loc标签按索引行位置2、3和列A、B筛选数据print(df2.loc[1,[A,B]]) #3.用loc标签按索引行位置1和列A、B筛选数据返回Series一维数据A df2.A #df2.A与df2[A]方法等价print(df2.loc[A[2],A]) #3.提取标量值用df2.A中的标量4数据用loc标签按索引行位置4和列A的数据返回该位置的标量值image4.布尔型筛选布尔型筛选主要是将True值的内容筛选出来下列两例分别是逻辑符号、isin识别数值、字符串类型的方法。#布尔索引df2[df2.A8] #4.返回df2.A8布尔值为True的筛选结果数据df2[E]list(jsky) #对df2中的E行赋值df2[df2[E].isin(list(ky))] #4.isin函数返回字符串匹配的布尔值为True的结果image5.位置筛选主要使用iloc标签通过行列不同的位置切片获取到自己期望的数据如下筛选某行数据df2.iloc[:2]筛选某行某列数据df2.iloc[:2,0:2]筛选具体的数值df2.iloc[1,1]或df2.iat[1,1]#位置索引print(df2.iloc[:2]) #5.筛选索引行位置0、1的数据print(df2.iloc[:2,0:2]) #5.筛选索引行位置0、1列位置0、1的数据print(df2.iloc[1,1]) #5.筛选索引行位置1列位置1的数据print(df2.iat[1,1]) #5.筛选索引行位置1列位置1的数据image四、赋值#赋值df2[E]K #按列赋值df2.iloc[0,0]1000 #按位置赋值df2.at[df2.index[0],B]2000 #按标签赋值通过将数据筛选出来后进行赋值如下例子image五、缺失值常见的缺失值处理有两种方法忽略缺失值dropna对缺失值重新赋值fillna.下面将通过reindex方法创建一个新的dataframe用于练习缺失值的处理如图所示。(reindex重建索引可更改、输出、添加指定轴索引返回数据副本不更改原数据)忽略缺失值df4.dropna(howany)缺失值重新赋值df4.fillna(5)#缺失值df4df2.reindex(index[0,1,2,3,4,5],columnslist(df2.columns)[E])df4.loc[1:3,E]1df4.dropna(howany)#忽略任何一行缺失值数据df4.fillna(5)#对含有缺失值的数据重新赋值df4.isna()#布尔关系image六、运算一般情况下运算时排除缺失值运算时axis默认为0表示按列计算axis1表示按行计算pandas自动沿指定维度广播。以mean(均值)和sum(求和)为例。#运算print(df2.mean())df2.sum(axis1)image函数名称说明pd.mean()pd.mean(0)或axis0默认表示把dataframe的列和求平均按行扩展pd.mean(1)表示把dataframe的行和求平均skipna:统计时是否排除缺失值默认值为Truepd.sum()pd.sum(0)默认表示把dataframe的列求和按行扩展pd.sum(1)默认表示把dataframe的行求和pd.count()非NA值的数量0表示各列计数1表示各行的计数值Pd.describe()针对Series或各dataframe列计算汇总统计pd.min()/pd.max()最小值或最大值0表示各列的最大值1表示各行的最大值pd.idxmin()/pd.idxmax()获得到最小值或最大值的索引值0表示各列1表示各行pd.quantile()样本的分位数0表示各列1表示各行pd.median()值的算术中位数(50%分位数2分位数中位数),0表示各列1表示各行pd.mad()根据平均值计算绝对离差0表示各列1表示各行pd.var()/pd.std()样本值的方差/标准差0表示各列1表示各行pd.cumsum()默认按照行累加即计算当前行与前面所有行之和七、函数Applyapply方法应用numpy自带的函数自定义的函数等其中axis默认为0表示按行计算按列广播axis1表示按列计算按行广播。按详见以下案例#函数print(df2.apply(lambda X: X.max()-1,axis1))df2.apply(np.cumsum)df2.cumsum(axis1)image其中cumsum为按行累加等价于df2.cumsum()方法表示计算当前行与前面所有行之和。图上例子表示的正是按行累加按列广播的效果。八、直方图直方图在统计学里表示数据的分布的趋势通常用它来表示数据的变化趋势在pandas中可以用value_counts()来表示series数据的出现频次用mode()表示series和dataframe中的不重复的数据。imageimage九、字符串的处理1.字符串类型的定义使用astype(string)方法或在创建pandas对象时定义如dtypestring或dtypepd.StringDtype()2.常见的字符串的处理有str方法只适合series数据去除空格【str.strip()、str.lstrip()、str.rstrip()】大小写转换【str.lower()、str.upper()】,字符串长度【str.len()】、统计字符串a出现的次数【str.count(a)】,是否是数字的布尔判断【str.isdigt()】、是否与某个字符串a匹配的布尔判断【str.match(a)】十、合并(concat/merge/append)1.结合-concat把多串数组或Series组合在一起成为dataframe#合并-结合concatdf4pd.DataFrame(np.random.randn(10,4))pieces[df4[:3],df4[3:7]]pd.concat(pieces)image2.连接-merge将两个表的数据连接在一起有点像sql中的inner..join..的用法根据连接关键字段将两个表的数据连接一起呈现如下图所示#连接join用法-merge有点类似数据库的跨表查询leftpd.DataFrame({name:[Amily,Jack],Country:[US,Canada],year:[12,22]})rightpd.DataFrame({name:[Amily,Amily],join_time:[2020-01-02,2020-02-01]})print(left,\n\n,right)pd.merge(left,right,onname)image3.追加-append将一个数组series或dataframe表格添加到另外一个dataframe表格上如下图所示注意当数组和series追加是添加行数据按照列的位置填入若有超出的列或不足的列位置用NA(np.nan、none)表示当追加的数据是dataframe时将会匹配列名若无法匹配则直接添加为新列如下图所示#追加appenddf4.append(df2[B])df4.append(df2[[B,C]])image十一、分组(groupby)通过groupby()可以将dataframe中的某一列按类别分组结合运算函数比如sum()count()等函数就可以实现将表格按照分组计算的功能image十二、重塑和堆叠(stack)Dataframe具有多重索引的功能利用MultiIndexf方法可定义多个索引。而stack是将DataFrame的列标签压缩为行标签unstack()而是将多个行标签转换为列标签其中unstack(0)unstack(1)表示从顶级行标签到末级行标签进行转换。imageimage十三、数据透视表运用pd.pivot_table()方法可以对二维数据中的数据按照需求快速建立新表进行按照各维度快速分类计算结合运算函数的方法以便更好的了解数据规律。其中values为透视表中用来作为计算和展示的数据。image十四、时间序列(timeseries)主要通过pd.to_timedate和pd.date_range将普通数据转化为时间类型的数据生成时间类型的标量数据在pandas中进行时间相关的计算。简单用法如下#转化其他类型的数据为时间戳t1pd.to_datetime([2010-01-10,Jul 31, 2009,2020/10/1])t2pd.to_datetime(pd.Series([2020-02-10,Jul 31, 2009,2020/10/1]))t3pd.to_datetime(2020.10.1)#date_range的defalut-freqt12pd.date_range(start2020-01-01,periods10)十五、类别型(Categoricals)1.astype(category):创建类别型的series数据2.series.cat.categories:修改现有series中的类别名称3.series.cat.set_categories:生成新的series类别名称4.sort_values排序是按照生成类别时的位置顺序来排的4.groupby按类分组如果空值的类也会显示出来显示为0如图#类别型数据#astype(category)创建类型数据dfpd.DataFrame({id:[1,2,3,4,5,6],raw_grade:[a,a,b,b,b,d]})#1.创建新的grade类并对这个新的类按照raw_grade赋值并将数据类型改df[grade]df[raw_grade].astype(category) 为category类型print(df[grade]) #打印该列出来可以看到dtype为category类型及其具体的类型值 Categories (3, object): [a, b, d]#2.修改类型数据中的分类名称df[grade].cat.categories[very good,good,very bad] #series.cat.categories对grade列中的类别名称进行重定义#3.建立grade1列使用Series.cat.set_categories方法将建立新类df[grade1]df[grade].cat.set_categories([very bad,bad,very good,good])print(df[grade1])#筛选该列series出来有4类即定义的4类Categories (4, object): [very bad, bad, very good, good]#4.这里排序是按照生成类别时的位置顺序来排的print(df.sort_values(bygrade1) )#5.分组的类如果有控制也会显示出来显示为0print(df.groupby(grade1).count())用法打印结果十六、可视化(plot)#可视化tspd.Series(np.random.randn(1000),indexpd.date_range(2018.01.01,periods1000))tsts.cumsum()ts.plot() #plot绘制series的图形#Dataframe绘制plot图表df10pd.DataFrame(np.random.randn(1000,4),indexpd.date_range(2018.01.01,periods1000),columnslist(ABCD))df10 df10.cumsum()df10.plot()Series和dataframe使用plot生成的图形十七、数据输入 / 输出1.CSV文件的读写#读取 CSV 文件数据pd.read_csv(foo.csv)#写入CSV文件df10.to_csv(foo.csv)2.Excel文件的读写#读取 Excel文件数据pd.read_excel(foo.xlsx,“sheet1”index_colNone, na_values[NA])#写入Excel文件df10.to_excel(foo.xlsx, sheet_nameSheet1)3.读取HDF5文件HDF5是一种跨平台数据储存文件#读取 HDF5文件数据pd.read_hdf(foo.h5, df)#写入HDF5文件df.to_hdf(foo.h5, df)