Pandas无疑是Python处理表格数据最好的库之一,但很多新手却无从下手。这里总结了29个最常用的函数。印象,以后用的时候,打开这篇文章CTRL+F搜索函数名,找回用法。1.读取csv文件df.read_csvcsv通常是读取PandasDataFrame最流行的文件格式。您可以使用pd.read_csv()方法来创建PandasDataFrame。类似的函数是read_excel。用法如下:file="file.csv"df=pd.read_csv(file)print(df)#######outputput##########col1col2col3012A134B2、写入csv文件df.to_csv将DataFrame导出为csv,类似的功能还有df.to_excel,用法如下:df.to_csv("file.csv",sep="|",index=False)查看file.csv!catfile.csvcol1|col2|col31|2|A3|4|B3,数据框pd.DataFrame用于创建Pandas的DataFrame:data=[[1,2,"A"],[3,4,"B"]]df=pd.DataFrame(data,columns=["col1","col2","col3"])print(df)#######输出放##########col1col2col3012A134B使用这个构造函数,我们也可以将字典转换成DataFrame:data={'col1':[1,2],'col2':[3,4],'col3':["A","B"]}df=pd.DataFrame(data=data)print(df)#######输出放##########col1col2col3col1col2col3013A124B4,得到dataframedf.shapedf.shape属性的shape可以得到DataFrame的shape,也就是几行列这样的数据:print(df)print("Shape:",df.shape)#######outputput##########col1col2col3col1col2col3013A124BShape:(2,3)5.查看df.head(n)的前n行数据帧(DataFrame)会有很多行。通常我们只对查看DataFrame的前n行感兴趣。这时候我们可以使用df.head(n)方法打印前n行:print(df.head(5))#######outputput##########col1col2col3012A134B256C378D4910E6。打印列类型df.dtypesPandas为DataFrame中的每一列分配适当的数据类型使用dtypes参数打印所有列的数据类型:df.dtypes#######outputput###########col1int64col2int64col3objectdtype:object7,如果你修改列类型为type想改变列数据类型,可以使用astype()方法,如下:df["col1"]=df["col1"].astype(np.int8)print(df.dtypes)#######outputput##########col1int8col2int64col3objectdtype:object8-9,打印DataFrame的描述信息这里有两个函数,第一个df.info():df.info()#######输出放##########RangeIndex:10entries,0to9Datacolumns(total3columns):#ColumnNon-Null计数Dtype----------------------------0col110非空int81col210非空int642col310非空objectdtypes:int64(1)、int8(1)、object(1)内存使用:298.0+字节第二个是df.describe()。如果你想打印标准的统计信息,比如每个数字列的均值、标准差和最大值,你可以这样做:print(df.describe())#######output##########Col1Col2count10.0010.00Mean10.0011.00Std6.066.06min1.002.0025%5.506.5050%10.0075%14.5015.50max19.0020.0010,填充NAN值DF.datadFillna=ifthereis."],[np.nan,4,"B"]],columns=["col1","col2","col3"])print(df)#######输出##########col1col2col301.02A1NaN4B里面有NaN,如果要填充,可以这样做:df.fillna(0,inplace=True)print(df)########输出##########col1col2col301.02A10.04B11。DataFrames的关联df.merge如果你想用一个连接键合并两个DataFrame,使用pd.merge()方法:合并之前:df1=...df2=...print(df1)print(df2)########outputput##########col1col2col3012A134A256Bcol3col40AX1BY使用df.merge后可以生成一个新的数据框pd。merge(df1,df2,on="col3")########输出放##########col1col2col3col4012AX134AX256BY12、数据框排序df.sort_values排序是DataFrame非常典型的操作,我们可以使用df.sort_values()方法对DataFrame进行排序:f=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"B"]],列=["col1","col2","col3"])print(df.sort_values("col1"))########outputput##########col1col2col3012A2310B158B13,数据框分组df.groupby到DataFrame要分组并进行聚合,请使用Pandas中的groupby()方法,如下所示:df=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"B"]],columns=["col1","col2","col3"])df.groupby("col3").agg({"col1":sum,"col2":max})########outputput##########col1col2col3A12B81014.重命名列df.rename如果要重命名列标题,请使用df.rename()方法如下图示例:f=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"B"]],columns=["col1","col2","col3"])df.rename(columns={"col1":"col_A"})########输出放##########col_Acol2col3012A158B2310B15。删除列df.drop如果要删除数据框中的列,可以这样做:df=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"B"]],columns=["col1","col2","col3"])print(df.drop(columns=["col1"]))########输出放##########col2col302A18B210B16。添加列方法一:使用赋值运算符添加新列df=pd.DataFrame([[1,2],[3,4]],columns=["col1","col2"])df["col3"]=df["col1"]+df["col2"]print(df)########输出##########col1col2col301231347方法2:df.assign()df=pd.DataFrame([[1,2],[3,4]],columns=["col1","col2"])df=df.assign(col3=df["col1"]+df["col2"])print(df)########outputput##########col1col2col30123134717,数据框过滤器-布尔如果该行的条件计算结果为真,则类型过滤器选择该行:df=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"B"]],columns=["col1","col2","col3"])print(df[df["col2"]>5])########输出##########col1col2col3158B2310B18,数据框过滤-获取某列df["col1"]##ordf.col1########outputput##########011523Name:col1,dtype:int6419,DataFrameFiltering-SelectbyLabeldf.loc在基于标签的选择中,每个需要的标签必须在DataFrame的索引中整数也是有效的标签,但它们指的是标签而不是索引位置。如果有如下DataFrame:df=pd.DataFrame([[6,5,10],[5,8,6],[3,10,4]],columns=["Maths","Science","English"],index=["John","Mark","Peter"])print(df)########outputput##########MathsScienceEnglishJohn6510Mark586Peter3104我们使用df.loc方法进行基于标签的选择:df.loc["John"]########outputput##########Maths6Science5English10Name:John,dtype:int64df.loc["Mark",["Maths","English"]]########outputput##########Maths5English6Name:mark,dtype:Int64但是在df.loc[]中不允许使用index来过滤DataFrame,如下图:20.Dataframefiltering-selectdf.ilocbyindex取19中的dataframe例如,使用df.iloc使用索引:df.iloc[0]########outputput##########Maths6Science5English10Name:John,dtype:int6421,deduplication数据框中的一列df=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"A"]],columns=["col1","col2","col3"])df["col3"].unique()########输出放##########array(['A','B'],dtype=object)22.获取dataframe中某列的去重数df["col3"].nunique()########outputput##########223、将函数应用于DataFramedf.apply非常有用:defadd_cols(row):returnrow.col1+row.col2df=pd.DataFrame([[1,2],[5,8],[3,9]],columns=["col1","col2"])df["col3"]=df.apply(add_cols,axis=1)print(df)########输出##########col1col2col301231581323912您还可以像这样将方法应用于单个列:defsquare_col(num):returnnum**2df=pd.DataFrame([[1,2],[5,8],[3,9]],columns=["col1","col2"])df["col3"]=df.col1.apply(square_col)print(df)########outputput##########col1col2col3012115825239924.标记重复行df.duplicated可以使用df.duplicated()方法标记所有重复行df=pd.DataFrame([[1,"A"],[2,"B"],[1,"A"]],columns=["col1","col2"])df.duplicated(keep=False)########outputput##########0True1False2Truedtype:bool25,删除重复行df.drop_duplicates可以使用df.drop_duplicates()方法删除重复行,如下:df=pd.DataFrame([[1,“A”],[2,“B”],[1,“A”]],列=[“col1”,“col2”])打印(df.drop_duplicates())########outputput##########col1col201A12B26,求值的分布value_counts要求一列中每个唯一值的频率,使用df.value_counts()方法:df=pd.DataFrame([[1,"A"],[2,"B"],[1,"A"]],columns=["col1","col2"])print(df.value_counts("col2"))########outputput###########col2A2B1dtype:int6427,重置DataFrame的索引df.reset_index重置DataFrame的索引,使用df.reset_index()方法:df=pd.DataFrame([[6,5,10],[5,8,6],[3,10,4]],列=["col1","col2","col3"],index=[2,3,1])print(df.reset_index())########outputput##########indexcol1col2col302651013586213104要删除旧索引,将drop=True作为参数传递给上述方法:df.reset_index(drop=True)########outputput##########col1col2col30651015862310428,查交叉表df.crosstab为返回跨越两个列的值的每个组合的频率,使用pd.crosstab()方法:df=pd.DataFrame([["A","X"],["B","Y"],["C","X"],["A","X"]],columns=["col1","col2"])print(pd.crosstab(df.col1,df.col2))########outputput##########col2XYcol1A20B01C1029.PivotdataframePivottable是Excel中常用的数据分析工具,类似于讨论的crosstab上面,Pandas数据透视表中的数据提供了一种交叉制表数据的方法。如果DataFrame如下:df=...print(df)NameSubjectMarks0JohnMaths61MarkMaths52PeterMaths33JohnScience54MarkScience85PeterScience106JohnEnglish107MarkEnglish68PeterEnglish4使用pd.pivot_table()方法,您可以将列条目转换为列标题:pd.pivot_table(df,index=["Name"],columns=["Subject"],values='Marks',fill_value=0)########outputput##########SubjectEnglishMathsScienceNameJohn1065Mark658Peter4310