本篇内容介绍了“Pandas函数有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
如果想自己运行这些示例,请从Kaggle下载Anime推荐数据集,将其解压缩并放入与jupyter notebook相同的文件夹中。
接下来运行这些指令,应该能重复得出以下任一函数的结果。
import pandas as pd import numpy as npanime =pd.read_csv('anime-recommendations-database/anime.csv') rating = pd.read_csv('anime-recommendations-database/rating.csv')anime_modified= anime.set_index('name')
输入CSV(逗号分隔值)
将CSV直接转换为数据框。有时CSV载入数据还需要指定一种编码(即:encoding='ISO-8859–1')。如果数据框包含不可读的字符,应首先尝试上述方法。
对于表格文件,存在一个叫做pd.read_excel的类似函数。
anime =pd.read_csv('anime-recommendations-database/anime.csv')
根据输入数据构建数据框
这在手动示例化简单数据时十分有用,方便查看这些数据运行时如何变化。
df = pd.DataFrame([[1,'Bob','Builder'], [2,'Sally', 'Baker'], [3,'Scott', 'CandleStick Maker']], columns=['id','name', 'occupation'])
df.head()
复制数据框
想保留原始副本同时对数据框进行更改,复制数据框很有用。在输入数据框后立即对其进行复制是很好的做法。
anime_copy =anime.copy(deep=True)
获取顶部或底部的n项记录
显示数据框中的前n项记录。笔者通常在notebook中的某个位置打印数据框的顶部记录,以便在忘记其中的内容时可以返回来参考。
anime.head(3) rating.tail(1)
计算行数
这本身不是pandas函数,而是len()函数对行进行计数,并将其保存到变量中,在其他地方使用。
len(df) #=> 3
计算唯一行
计算一列中的唯一值。
len(ratings['user_id'].unique())
获取数据框信息
对于获取一些常规信息(如标题、值的数量和按列的数据类型)很有用。df.dtypes是一个类似但实用性低的函数,仅提供列数据类型。
anime.info()
获取统计数据
如果数据框具有很多数值,获取统计数据非常有用。了解评级列的平均值,最小值和最大值,可以大致了解数据框。
anime.describe()
获取值总和
获取特定列的值总和。
anime.type.value_counts()
保存为CSV格式
这将转储到与notebook相同的目录。笔者只保存下面的前10行,但读者不需要这样做。同样,也可使用df.to_excel() 函数,将表格文件保存为CSV格式。
rating[:10].to_csv('saved_ratings.csv',index=False)
获取列的值清单或一系列值。
需要将列中的值放入X和y变量中以适应机器学习模型时,此方法有效。
anime['genre'].tolist() anime['genre']
anime[‘genre’].tolist()
anime[‘genre’]
获取索引值列表
通过索引创建数值列表。请注意,这里使用了anime_modified数据框,因为索引值更加有趣。
anime_modified.index.tolist()
获取列值列表
anime.columns.tolist()
用设置值附加新列
偶尔,当测试集和训练集在两个单独的数据框中,并想在组合它们之前分别标记出行与集的对应关系时,笔者会这样做。
anime['train set'] = True
从一部分列中创建新的数据框
此方法用于只想保留巨型数据框中的几列并且不想指定删除列时。
anime[['name','episodes']]
删除指定列
删除指定列用于仅需删除几列时。否则,写出全部内容可能会很乏味,笔者更喜欢前者,删除指定列。
anime.drop(['anime_id', 'genre','members'], axis=1).head()
添加其他行总和的一行
因其更易于查看,故在此处手动创建一个小型数据框。这里的有趣之处在于,df.sum(axis=0)将值添加到各行或各列中。
计算总和或平均值时,采用同样的逻辑,如:
df.mean(axis=0). f = pd.DataFrame([[1,'Bob',8000], [2,'Sally', 9000], [3,'Scott', 20]],columns=['id','name', 'power level'])df.append(df.sum(axis=0),ignore_index=True)
串联两个数据框
用于同行有两个数据框,并想将其组合的情况。这里将数据框分成两部分,然后重新将它们添加在一起。
df1 = anime[0:2]df2 =anime[2:4]pd.concat([df1, df2], ignore_index=True)
合并数据框
想将两个数据框合并在一列时,合并数据框就如同SQL(结构化查询语言)的左联接用法。
rating.merge(anime,left_on=’anime_id’, right_on=’anime_id’, suffixes=(‘_left’, ‘_right’))
检索匹配索引值的行
anime_modified中的索引值是动漫的名称。请注意,如何使用这些名称来获取特定列。
anime_modified.loc[['Haikyuu!!Second Season','Gintama']]
通过编号索引值来检索行
与上面的函数不同,使用 iloc,第一行的索引值为0,第二行的索引值为1,以此类推……即便在修改数据框后,在索引列中使用字符串值。
使用此函数,当你想获得数据框中的前3行。
anime_modified.iloc[0:3]
获取行
在给定列表的列值中检索行。匹配单个值时,anime[anime[‘type’] == 'TV']也适用。
anime[anime['type'].isin(['TV','Movie'])]
拆分数据框
这就像拆分表格一样。拆分数据框,来获取在特定索引前/中/后的所有行。
anime[1:3]
通过值筛选
筛选符合条件的行的数据框。但注意,这将维持现有的索引值。
anime[anime['rating'] > 8]
排序函数sort_values
按列中的值对数据框进行排序。
anime.sort_values('rating',ascending=False)
分组和计数
计算列中每个不同值的记录数。
anime.groupby('type').count()
以不同方式对列进行分组和汇总
注意,笔者添加了 reset_index() 函数,否则,下文的“type”列将成为索引列——笔者建议在多数情况下这样做。
anime.groupby(["type"]).agg({ "rating": "sum", "episodes":"count", "name": "last" }).reset_index()
创建数据透视表
数据透视表是比较适合从数据框中提取数据子集的工具。
需注意,笔者已对数据框进行了大量筛选,因此可以更快地构建数据透视表。
tmp_df = rating.copy() tmp_df.sort_values('user_id', ascending=True, inplace=True) tmp_df = tmp_df[tmp_df.user_id < 10] tmp_df = tmp_df[tmp_df.anime_id < 30] tmp_df = tmp_df[tmp_df.rating != -1]pd.pivot_table(tmp_df, values='rating',index=['user_id'], columns=['anime_id'], aggfunc=np.sum, fill_value=0)
设置非数(NaN)单元格为某个值
设置非数值单元格为0。示例中,笔者像之前一样创建了相同的数据透视表,但不使用fill_value=0,而是使用 fillna(0)进行填充。
pivot = pd.pivot_table(tmp_df, values='rating',index=['user_id'], columns=['anime_id'], aggfunc=np.sum)pivot.fillna(0)
采样数据框
笔者一直从较大的数据框中提取少量样本。如果frac = 1,则可以在保留索引的情况下随机重新排行。
anime.sample(frac=0.25)
迭代行索引
在数据框中迭代索引和行。
for idx,row inanime[:2].iterrows(): print(idx, row)
启动jupyter notebook
以高数据速率限制启动jupyter notebook程序。
jupyter notebook —NotebookApp.iopub_data_rate_limit=1.0e10
“Pandas函数有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。