全文共2758字,预计学习时长13分钟

图源:unsplash

软件工程师该像是索引,而不是教科书。你无法记住所有内容,但得知道如何快速查找它们。

能够快速查找和使用函数让我们在编写代码时可以达到一定的流畅程度。因此笔者创建了这份自己每天都在使用的、用于构建网络应用程序和机器学习模型的函数备忘清单。

它不算详尽,但包含了笔者最常使用的函数、示例,以及该何时使用的有效见解。

1.安装

如果想自己运行这些示例,请从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')

图源:unsplash

2.输入

输入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)

3.查看和检验

获取顶部或底部的n项记录

显示数据框中的前n项记录。笔者通常在notebook中的某个位置打印数据框的顶部记录,以便在忘记其中的内容时可以返回来参考。

anime.head(3)
rating.tail(1)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()

4.输出

保存为CSV格式

这将转储到与notebook相同的目录。笔者只保存下面的前10行,但读者不需要这样做。同样,也可使用df.to_excel() 函数,将表格文件保存为CSV格式。

rating[:10].to_csv('saved_ratings.csv',index=False)

5.选取

获取列的值清单或一系列值

需要将列中的值放入X和y变量中以适应机器学习模型时,此方法有效。

anime['genre'].tolist()
anime['genre']

anime[‘genre’].tolist()

anime[‘genre’]

获取索引值列表

图源:unsplash

通过索引创建数值列表。请注意,这里使用了anime_modified数据框,因为索引值更加有趣。

anime_modified.index.tolist()

获取列值列表

anime.columns.tolist()

6.添加/删除

用设置值附加新列

偶尔,当测试集和训练集在两个单独的数据框中,并想在组合它们之前分别标记出行与集的对应关系时,笔者会这样做。

anime['train set'] = True

从一部分列中创建新的数据框

此方法用于只想保留巨型数据框中的几列并且不想指定删除列时。

anime[['name','episodes']]

删除指定列

删除指定列用于仅需删除几列时。否则,写出全部内容可能会很乏味,笔者更喜欢前者,删除指定列。

anime.drop(['anime_id', 'genre','members'], axis=1).head()

添加其他行总和的一行

因其更易于查看,故在此处手动创建一个小型数据框。这里的有趣之处在于,df.sum(axis=0)将值添加到各行或各列中。

计算总和或平均值时,采用同样的逻辑,如:

 df.mean(axis=0).
df = 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)

7.合并

串联两个数据框

用于同行有两个数据框,并想将其组合的情况。这里将数据框分成两部分,然后重新将它们添加在一起。

图源:unsplash

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’))

8.筛选

检索匹配索引值的行

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]

9.排序

排序函数sort_values

图源:unsplash

按列中的值对数据框进行排序。

anime.sort_values('rating',ascending=False)

10.汇总

分组和计数

计算列中每个不同值的记录数。

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)

11.整理

设置非数(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)

12.其他

采样数据框

笔者一直从较大的数据框中提取少量样本。如果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

图源:unsplash

你最喜欢哪些函数呢?

留言 点赞 关注

我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”

(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

数据科学家和软件工程师都在用的pandas函数有哪些?相关推荐

  1. fillna函数_听说这些pandas函数,是数据科学家和软件工程师的最爱

    全文共2758字,预计学习时长13分钟 图源:unsplash 软件工程师该像是索引,而不是教科书.你无法记住所有内容,但得知道如何快速查找它们. 能够快速查找和使用函数让我们在编写代码时可以达到一定 ...

  2. 每个软件工程师都应该知道的有关实时数据的统一概念

    转自:炼数成金 每个软件工程师都应该知道的有关实时数据的统一概念 我在六年前的一个令人兴奋的时刻加入到LinkedIn公司.从那个时候开始我们就破解单一的.集中式数据库的限制,并且启动到特殊的分布式系 ...

  3. 《日志:每个软件工程师都应该了解实时数据的统一抽象》

    本文被誉为程序员必读文章,学习消息队列的同学都应该看看.原文:The Log: What every software engineer should know about real-time dat ...

  4. 如何区分理解数据科学家与机器学习工程师

    数据科学家Vs机器学习工程师 原文: What are machine learning engineers? 来源: https://tech.co/12-ways-advantage-big-da ...

  5. 成都软件工程师python_为什么每个软件工程师都应该学习Python?

    为什么要写一篇文章告诉大家去学习python?最受欢迎的编程语言不是JAVA么? 的确,TIOBE指数显示JAVA依然是最受欢迎的编程语言,但是Python的崛起不可小觑,请看4月份最新的TIOBE指 ...

  6. 这五个数据科学家和机器学习工程师油管博主,你必须关注

    全文共1983字,预计学习时长5分钟 图源:unsplash 别再看没完没了地看油管上的猫咪视频!是时候利用它"武装"自己的大脑了.这5个油管博主,笔者强烈安利,让他们带你去了解如 ...

  7. 软件测试工程师需要什么软件_为什么每个软件工程师都应该撰写文章

    软件测试工程师需要什么软件 by Stanislav Kozlovski 斯坦尼斯拉夫·科兹洛夫斯基(Stanislav Kozlovski) 为什么每个软件工程师都应该撰写文章 (Why Every ...

  8. 数据科学家们更换工作都有哪些特征(上)?

    前面有文章数据分析之探索性数据分析,里面详细阐述了何为EDA,以及一些常用的分析方法,感兴趣的小伙伴们可以参考下. 本文分析数据科学家更换工作情况数据集,运用常见EDA方法分析每个特征情况及他们与目标 ...

  9. 为什么每个软件工程师都应该学习Python?

    大家好,如果您定期关注我的博客 ,或者在HackerNoon上阅读我的文章,那么您可能想知道为什么我要写一篇文章告诉人们学习Python ? 几年前,我不是要您比Java更喜欢Java吗? 从那以后, ...

最新文章

  1. 关于Django的时区设置TIME_ZONE,USE_TZ的问题
  2. C++模板:类模板和类模板的友元【C++模板】(57)
  3. Android第二十八天
  4. 【Android】自定义Loader:loadInBackground+onStartLoading+onStopLoading+onReset+onCanceled
  5. 十二岁孩子学编程用c语言好吗,太原12岁学编程
  6. 20145212 《信息安全系统设计基础》第3周学习总结
  7. 矩形覆盖-----批了外皮的亲蛙跳
  8. C# ITextSharp pdf 自动打印
  9. 开放 接口 饿了么_饿了么口碑启动生态赋能计划 将在210城开放智慧餐厅业务合作窗口...
  10. 关于Android平台上面is not valid; is your activity running?
  11. C语言进阶(一):宏函数内定义结构体
  12. 求导计算机在线,求导计算器
  13. 推箱子c语言代码有注释,C语言代码实现推箱子小游戏
  14. Android 获取gateway网关地址
  15. 独立思考者的思考模型----智商160以上的人都应该学会的(摘自杜牛牛博客)
  16. Cocos2dx开发手机游戏工具集(持续更新)
  17. MiniCMS - 吐槽
  18. 吉他编曲--如何“扒带”(下)
  19. golang: 密码中允许出现数字、大写字母、小写字母、特殊字符,但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可)
  20. bat - 批量替换文件名字符

热门文章

  1. 眼图观测实验报告_实验2 眼图观察测量实验
  2. 网易云信短信接口java_网易云短信接口测试
  3. linux 分析nginx日志,Linux Awk使用案例总结-nginx日志统计
  4. 统计学(第七版)第二章 数据的收集
  5. 数字图像处理实验——数字图像处理初步
  6. 简单20行代码爬取王者荣耀官网1080p壁纸
  7. 将优狐智能插座接入 Domoticz
  8. 【Python】实现csv文件转json文件
  9. mac装linux系统u盘安装教程视频,mac上制作linux系统U盘安装盘
  10. 【python】实现SIMM算法