焦点速看:学会这 29 个 函数,你就是 Pandas 专家
Pandas 无疑是 Python 处理表格数据最好的库之一,但是很多新手无从下手,这里总结出最常用的 29个函数,先点赞收藏,留下印象,后面使用的时候打开此文CTRL + F 搜索函数名称,检索其用法即可。
(资料图)
csv 通常是读取 Pandas DataFrame 的最流行的文件格式,你可以使用 pd.read_csv() 方法创建 Pandas DataFrame,类似的函数还有 read_excel,用法如下:
file="file.csv"df=pd.read_csv(file)print(df)#######output##########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)#######output##########col1col2col3012A134B
借助这个构造函数,我们还可以把字典转换为 DataFrame:
data={"col1":[1,2],"col2":[3,4],"col3":["A","B"]}df=pd.DataFrame(data=data)print(df)#######output##########col1col2col3col1col2col3013A124B4、 获取数据帧的形状 df.shape
df.shape 属性可以获取 DataFrame 的形状,也就是几行几列这样的数据:
print(df)print("Shape:",df.shape)#######output##########col1col2col3col1col2col3013A124BShape:(2,3)5、查看前 n 行 df.head(n)
数据帧(DataFrame) 会有很多行,通常我们只对查看 DataFrame 的前 n 行感兴趣,这时可以使用 df.head(n) 方法打印前 n 行:
print(df.head(5))#######output##########col1col2col3012A134B256C378D4910E6、打印列的类型 df.dtypes
Pandas 为 DataFrame 中的每一列分配适当的数据类型。使用 dtypes 参数打印所有列的数据类型:
df.dtypes#######output##########col1int64col2int64col3objectdtype:object7、修改列的类型 astype
如果要更改列的数据类型,可以使用 astype() 方法,如下所示:
df["col1"]=df["col1"].astype(np.int8)print(df.dtypes)#######output##########col1int8col2int64col3objectdtype:object8-9、打印有关 DataFrame 的描述性信息
这里有两个函数,第一个 df.info():
df.info()#######output##########RangeIndex:10entries,0to9Datacolumns(total3columns):#ColumnNon-NullCountDtype----------------------------0col110non-nullint81col210non-nullint642col310non-nullobjectdtypes:int64(1),int8(1),object(1)memoryusage:298.0+bytes
第二个是 df.describe()。
如果要打印每个数值列的平均值、标准偏差、最大值等标准统计信息,就可以这样:
print(df.describe())#######output##########col1col2count10.0010.00mean10.0011.00std6.066.06min1.002.0025%5.506.5050%10.0011.0075%14.5015.50max19.0020.0010、 填充 NaN 值 df.fillna
假如有这样的 DataFrame:
df=pd.DataFrame([[1,2,"A"],[np.nan,4,"B"]],columns=["col1","col2","col3"])print(df)#######output##########col1col2col301.02A1NaN4B
里面有 NaN,如果要填充它,可以这样:
df.fillna(0,inplace=True)print(df)########output##########col1col2col301.02A10.04B11、数据帧的关联 df.merge
如果你想用一个连接键合并两个 DataFrame,使用 pd.merge() 方法:
merge 之前:
df1=...df2=...print(df1)print(df2)########output##########col1col2col3012A134A256Bcol3col40AX1BY
使用 df.merge 后,可以生成新的数据帧
pd.merge(df1,df2,on="col3")########output##########col1col2col3col4012AX134AX256BY12、数据帧排序 df.sort_values
排序是 DataFrame 非常典型的操作,我们可以使用 df.sort_values() 方法对 DataFrame 进行排序:
f=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"B"]],columns=["col1","col2","col3"])print(df.sort_values("col1"))########output##########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})########output##########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"})########output##########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"]))########output##########col2col302A18B210B16、增加列
方法一:使用赋值运算符添加新列
df=pd.DataFrame([[1,2],[3,4]],columns=["col1","col2"])df["col3"]=df["col1"]+df["col2"]print(df)########output##########col1col2col301231347
方法二:df.assign()
df=pd.DataFrame([[1,2],[3,4]],columns=["col1","col2"])df=df.assign(col3=df["col1"]+df["col2"])print(df)########output##########col1col2col30123134717、数据帧过滤-布尔型过滤
如果该行上的条件评估为 True,则选择该行:
df=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"B"]],columns=["col1","col2","col3"])print(df[df["col2"]>5])########output##########col1col2col3158B2310B18、数据帧过滤-之获取某一列
df["col1"]##ordf.col1########output##########011523Name:col1,dtype:int6419、数据帧过滤-按标签选择 df.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)########output##########MathsScienceEnglishJohn6510Mark586Peter3104
我们使用 df.loc 方法进行基于标签的选择:
df.loc["John"]########output##########Maths6Science5English10Name:John,dtype:int64
df.loc["Mark",["Maths","English"]]########output##########Maths5English6Name:Mark,dtype:int64
但是在df.loc[]中,不允许使用索引来过滤 DataFrame,如下图:
20、数据帧过滤-按索引选择 df.iloc以 19 里面的数据帧为例,使用 df.iloc 可以用索引:
df.iloc[0]########output##########Maths6Science5English10Name:John,dtype:int6421、数据帧中对某一列去重
df=pd.DataFrame([[1,2,"A"],[5,8,"B"],[3,10,"A"]],columns=["col1","col2","col3"])df["col3"].unique()########output##########array(["A","B"],dtype=object)22、数据帧中获取某一列去重后的个数
df["col3"].nunique()########output##########223、将函数应用于 DataFrame df.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)########output##########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)########output##########col1col2col3012115825239924、标记重复行 df.duplicated
你可以使用 df.duplicated() 方法标记所有重复的行
df=pd.DataFrame([[1,"A"],[2,"B"],[1,"A"]],columns=["col1","col2"])df.duplicated(keep=False)########output##########0True1False2Truedtype:bool25、删除重复行 df.drop_duplicates
可以使用 df.drop_duplicates() 方法删除重复的行,如下所示:
df=pd.DataFrame([[1,"A"],[2,"B"],[1,"A"]],columns=["col1","col2"])print(df.drop_duplicates())########output##########col1col201A12B26、寻找值的分布 value_counts
要查找列中每个唯一值的频率,请使用 df.value_counts() 方法:
df=pd.DataFrame([[1,"A"],[2,"B"],[1,"A"]],columns=["col1","col2"])print(df.value_counts("col2"))########output##########col2A2B1dtype:int6427、 重置 DataFrame 的索引 df.reset_index
要重置 DataFrame 的索引,请使用 df.reset_index() 方法:
df=pd.DataFrame([[6,5,10],[5,8,6],[3,10,4]],columns=["col1","col2","col3"],index=[2,3,1])print(df.reset_index())########output##########indexcol1col2col302651013586213104
要删除旧索引,请将 drop=True 作为参数传递给上述方法:
df.reset_index(drop=True)########output##########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))########output##########col2XYcol1A20B01C1029、透视数据帧
数据透视表是 Excel 中常用的数据分析工具。与上面讨论的交叉表类似,Pandas 中的数据透视表提供了一种交叉制表数据的方法。
假如 DataFrame 如下:
df=...print(df)NameSubjectMarks0JohnMaths61MarkMaths52PeterMaths33JohnScience54MarkScience85PeterScience106JohnEnglish107MarkEnglish68PeterEnglish4
使用 pd.pivot_table() 方法,可以将列条目转换为列标题:
pd.pivot_table(df,index=["Name"],columns=["Subject"],values="Marks",fill_value=0)########output##########SubjectEnglishMathsScienceNameJohn1065Mark658Peter4310最后的话
恭喜你看完了 Pandas 中最常用的 29 种方法,后面在使用 Pandas 时,你可能会在 90% 的时间里使用这些方法,点赞、收藏、关注,后续使用 Pandas 不迷路。当然了,如果你要做一名数据分析师,只有 Pandas 还是不够的,还需要系统的学习,这里推荐一本书:
祝学有所成。
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...