前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >快速介绍Python数据分析库pandas的基础知识和代码示例

快速介绍Python数据分析库pandas的基础知识和代码示例

作者头像
deephub
发布于 2020-07-29 02:41:28
发布于 2020-07-29 02:41:28
8.1K00
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

软件工程师阅读教科书作为参考时不会记住所有的东西,但是要知道如何快速查找重·要的知识点。”

为了能够快速查找和使用功能,使我们在进行机器学习模型时能够达到一定流程化。我创建了这个pandas函数的备忘单。这不是一个全面的列表,但包含了我在构建机器学习模型中最常用的函数。让我们开始吧!

本附注的结构:

  • 导入数据
  • 导出数据
  • 创建测试对象
  • 查看/检查数据
  • 选择查询
  • 数据清理
  • 筛选、排序和分组
  • 统计数据

首先,我们需要导入pandas开始:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 import pandas as pd

导入数据

使用函数pd.read_csv直接将CSV转换为数据格式。

注意:还有另一个类似的函数pd。read_excel用于excel文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # Load data
 df = pd.read_csv('filename.csv') # From a CSV file
 df = pd.read_excel('filename.xlsx') # From an Excel file

导出数据

to_csv()将数据存储到本地的文件。我们可以通过df[:10].to_csv()保存前10行。我们还可以使用df.to_excel()保存和写入一个DataFrame到Excel文件或Excel文件中的一个特定表格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df.to_csv('filename.csv') # Write to a CSV file
 df.to_excel('filename.xlsx') # Write to an Excel file

创建测试对象

从输入的数据建立一个DataFrame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # Build data frame from inputted data
 df = pd.DataFrame(data = {'Name': ['Bob', 'Sally', 'Scott', 'Katie'],
  'Physics': [68, 74, 77, 78],
  'Chemistry': [84, 100, 73, 90],
  'Algebra': [78, 88, 82, 87]})

或者从列表中创建一个series

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #  Create a series from an iterable my_list
 my_list = [['Bob',78],
           ['Sally',91],
           ['Scott',62],
           ['Katie',78],
           ['John',100]]
 df1 = pd.Series(my_list) # Create a series from an iterable my_list

查看/检查数据

head():显示DataFrame中的前n条记录。我经常把一个数据档案的最上面的记录打印在我的jupyter notebook上,这样当我忘记里面的内容时,我可以回头查阅。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df.head(3) # First 3 rows of the DataFrame

tail():返回最后n行。这对于快速验证数据非常有用,特别是在排序或附加行之后。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df.tail(3) # Last 3 rows of the DataFrame

添加或插入行

要向DataFrame追加或添加一行,我们将新行创建为Series并使用append()方法。

在本例中,将新行初始化为python字典,并使用append()方法将该行追加到DataFrame。

在向append()添加python字典类型时,请确保传递ignore_index=True,以便索引值不会被使用。生成的轴将被标记为编号series0,1,…, n-1,当连接的数据使用自动索引信息时,这很有用。

append() 方法的作用是:返回包含新添加行的DataFrame。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #Append row to the dataframe, missing data (np.nan)
 new_row = {'Name':'Max', 'Physics':67, 'Chemistry':92, 'Algebra':np.nan}
 df = df.append(new_row, ignore_index=True)

向DataFrame添加多行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # List of series  
 list_of_series = [pd.Series(['Liz', 83, 77, np.nan], index=df.columns),
                 pd.Series(['Sam', np.nan, 94,70], index=df.columns ),
                 pd.Series(['Mike', 79,87,90], index=df.columns),
                 pd.Series(['Scott', np.nan,87,np.nan], index=df.columns),]
 # Pass a list of series to the append() to add multiple rows
 df = df.append(list_of_series , ignore_index=True)

我们也可以添加新的列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # Adding a new column to existing DataFrame in Pandas
 sex = ['Male','Female','Male','Female','Male','Female','Female','Male','Male']
 df['Sex'] = sex

info()函数用于按列获取标题、值的数量和数据类型等一般信息。一个类似但不太有用的函数是df.dtypes只给出列数据类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df.info() #Index, Datatype and Memory information
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # Check data type in pandas dataframe
 df['Chemistry'].dtypes
 >>> dtype('int64')#  Convert Integers to Floats in Pandas DataFrame
 df['Chemistry'] = df['Chemistry'].astype(float)
 df['Chemistry'].dtypes
 >>> dtype('float64')# Number of rows and columns
 df.shape
 >>> (9, 5)

value_counts()函数的作用是:获取一系列包含唯一值的计数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # View unique values and counts of Physics column
 df['Physics'].value_counts(dropna=False)

选择

在训练机器学习模型时,我们需要将列中的值放入X和y变量中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df['Chemistry'] # Returns column with label 'Chemistry' as Series
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df[['Name','Algebra']] # Returns columns as a new DataFrame
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df.iloc[0] # Selection by position
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.iloc[:,1] # Second column 'Name' of data frame
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.iloc[0,1] # First element of Second column
>>> 68.0

数据清理

rename()函数在需要重命名某些选定列时非常有用,因为我们只需要指定要重命名的列的信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Rename columns
df = df.rename({'Name':'Student','Algebra':'Math'}, axis='columns')

在DataFrame中,有时许多数据集只是带着缺失的数据的,或者因为它存在而没有被收集,或者它从未存在过。

NaN(非数字的首字母缩写)是一个特殊的浮点值,所有使用标准IEEE浮点表示的系统都可以识别它

pandas将NaN看作是可互换的,用于指示缺失值或空值。有几个有用的函数用于检测、删除和替换panda DataFrame中的空值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Checks for null Values, Returns Boolean Arrray
check_for_nan = df.isnull()

要检查panda DataFrame中的空值,我们使用isnull()或notnull()方法。方法返回布尔值的数据名,对于NaN值为真。在相反的位置,notnull()方法返回布尔值的数据,对于NaN值是假的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
value = df.notnull() # Opposite of df2.isnull()

我们使用dropna()函数删除所有缺少值的行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
drop_null_row = df.dropna() # Drop all rows that contain null values

有时,我们可能只是想删除缺失值的列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Drop all columns that contain null values
drop_null_col = df.dropna(axis=1)

我们可以使用fillna()来填充缺失的值。例如,我们可能想用0替换' NaN '。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
replace_null = df.fillna(0) # Replace all null values with 0

或者用平均值替换NaN。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Replace all null values with the mean (mean can be replaced with almost any function from the statistics module)
df = round(df.fillna(df.mean()),2)

方法可用于替换DataFrame中的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
one = df.replace(100,'A') # Replace all values equal to 1 with 'one'

筛选、排序和分组

找到看到物理成绩达到80或80以上的学生

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fil_80 = df[df['Physics'] > 80]

学生在化学考试中得到80分或更高的分数,数学考试中却不到90分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fil = df[(df['Chemistry'] > 80) & (df['Math'] < 90)]

sort_values ()可以以特定的方式对pandas数据进行排序。通常回根据一个或多个列的值对panda DataFrame进行排序,或者根据panda DataFrame的行索引值或行名称进行排序。

例如,我们希望按学生的名字按升序排序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ascending = df.sort_values('Student')

化学分数按降序排列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
descending = df.sort_values('Chemistry',ascending=False)

更复杂一点的,我们希望按物理分数的升序排序,然后按化学分数的降序排序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.sort_values(['Physics','Chemistry'],ascending=[True,False])

groupby 是一个非常简单的概念。我们可以创建一组类别,并对类别应用一个函数。这是一个简单的概念,但却是我们经常使用的极有价值的技术。Groupby的概念很重要,因为它能够有效地聚合数据,无论是在性能上还是在代码数量上都非常出色。

通过性别进行分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
group_by = df.groupby(['Sex']) # Returns a groupby object for values from one column
group_by.first() # Print the first value in each group

计算性别分组的所有列的平均值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
average = df.groupby(‘Sex’).agg(np.mean)

统计数据

我们可能熟悉Excel中的数据透视表,可以轻松地洞察数据。类似地,我们可以使用panda中可用的pivot_table()函数创建Python pivot表。该函数与group_by()函数非常相似,但是提供了更多的定制。

假设我们想按性别将值分组,并计算物理和化学列的平均值和标准差。我们将调用pivot_table()函数并设置以下参数:

index设置为 'Sex',因为这是来自df的列,我们希望在每一行中出现一个唯一的值

values值为'Physics','Chemistry' ,因为这是我们想应用一些聚合操作的列

aggfunc设置为 'len','np.mean','np.std

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pivot_table = df.pivot_table(index='Sex',
                             values=['Physics','Chemistry'],
                             aggfunc=[len, np.mean, np.std])

注意:使用len的时候需要假设数据中没有NaN值。

description()用于查看一些基本的统计细节,如数据名称或一系列数值的百分比、平均值、标准值等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.describe() # Summary statistics for numerical columns

使用max()查找每一行和每列的最大值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Get a series containing maximum value of each row
max_row = df.max(axis=1)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Get a series containing maximum value of each column without skipping NaN
max_col = df.max(skipna=False)

类似地,我们可以使用df.min()来查找每一行或每列的最小值。

其他有用的统计功能:

sum():返回所请求的轴的值的总和。默认情况下,axis是索引(axis=0)。

mean():返回平均值

median():返回每列的中位数

std():返回数值列的标准偏差。

corr():返回数据格式中的列之间的相关性。

count():返回每列中非空值的数量。

总结

我希望这张小抄能成为你的参考指南。当我发现更多有用的Pandas函数时,我将尝试不断地对其进行更新。本文的代码

https://github.com/Nothingaholic/Python-Cheat-Sheet/blob/master/pandas.ipynb

作者:XuanKhanh Nguyen

deephub翻译组

DeepHub

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React Native之react-native-scrollable-tab-view详解
在React Native开发中,官方为我们提供的Tab控制器有两种:TabBarIOS和ViewPagerAndroid。TabBarIOS,仅适用于IOS平台 ViewPagerAndroid,仅适用于Android平台(严格来讲并不算,因为我们还需要自己实现Tab)。在项目开发中,我们优先选择一些开源兼容性比较好的第三方库,例如,react-navigation,以及本文即将说到的react-native-scrollable-tab-view(官方地址)。react-native-scrolla
xiangzhihong
2018/02/06
6.5K0
React Native之react-native-scrollable-tab-view详解
【React Native】react-native-scrollable-tab-view
一张跟内容完全关系的图 介绍 一个带有TabBar和可切换页面的控件。 在Android中可以看成是ViewPager和TabLayout的结合。 实际效果的话,就下面这样了。 官方的动图 你可以选择直接上官方Github了解怎么使用,或者继续往下看我装逼。 添加到项目中 npm install react-native-scrollable-tab-view --save 使用 基本用法 用tabLabel指定Tab名称 render() { return ( <S
Gavin-ZYX
2018/05/18
2.7K0
React Native 实现基于react-native-tab-navigator库Tab切换封装
react-native-tab-navigator是一款Tab切换的库,细心的读者可能注意到了对于TabNavigator.Item选项卡部分,代码功能上基本上是重复的,对此,我们能不能对这种有相同
xiangzhihong
2018/02/06
4.1K0
React Native 实现基于react-native-tab-navigator库Tab切换封装
React Native导航器之react-navigation使用
在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigation。在讲react-navigation之前,我们先看一下常用的导航组件。 导航控件 常见的导航主要分为三种: 1.StackNavigator :类似于普通的Navigator,屏幕上方导航栏 2.TabNavigator:obviously, 相当于iOS里面的TabBarController,屏幕下方标签栏 3.DrawerNavi
xiangzhihong
2018/02/06
12.5K0
React Native导航器之react-navigation使用
React Native 系列(九) -- Tab标签组件
前言 本系列是基于React Native版本号0.44.3写的。很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容。那么这篇文章将介绍RN中的Tab标签组件。 Tab标签 什么是Tab标签?(ps:我是这样叫的),就拿微信来说吧,底部有4个选项卡,点击不同的按钮切换不同的内容。 在RN中有两个组件负责实现这样的效果,它们是: TabBarIOS TabNavigator TabBarIOS 和NavigatorIOS相似,看名字就知道该组件只适用于iOS,不能用于
Scott_Mr
2018/05/16
6.5K0
4. Navigation实战
本来想写一个应用redux的Navigation实战,但是发现react-native有又新的更新,新手怕误导大家,就直接用了别人的组件,看看怎么应用吧。本次在github找了一个别人写好的组件react-native-router-flux,主要看看怎么集成到项目里,强烈推荐研读源码,还有一个别人项目里的,感觉也不错推荐。
MasterVin
2018/08/30
8010
4. Navigation实战
React Native(四)——顶部以及底部导航栏实现方式
其实刚入手做app的时候,就应该做出简单的顶部以及底部导航栏。无奈又在忙其他事情,导致这些现在才整理出来。
全栈程序员站长
2022/07/20
3.3K0
React Native(四)——顶部以及底部导航栏实现方式
React Native自定义Button
效果: 引用文件代码: import React, { Component } from 'react'; import { AppRegistry, Image, Text,
星宇大前端
2019/01/15
1.1K0
一个简单的ReactNative demo
本人非前端,请轻喷 ReactNative版本:0.31 github:https://github.com/X-FAN/reactnativelearn
夏洛克的猫
2018/10/18
2K0
一个简单的ReactNative demo
React Native之prop-types进行属性确认
React Native已经升级到0.51.0了,版本升级很快,但是对老项目也会有一些问题,常见的就是属性找不到的问题。例如: 主要原因是随着React Native的升级,系统废弃了很多
xiangzhihong
2018/02/06
1.5K0
React Native之prop-types进行属性确认
React Native控件只TextInput
TextInput是一个允许用户在应用中通过键盘输入文本的基本组件。本组件的属性提供了多种特性的配置,譬如自动完成、自动大小写、占位文字,以及多种不同的键盘类型(如纯数字键盘)等等。 比如官网最简单的写法: import React, { Component } from 'react'; import { AppRegistry, TextInput } from 'react-native'; class UselessTextInput extends Component { construct
xiangzhihong
2018/02/05
3.7K0
React Native控件只TextInput
React Native(二):react-navigation
react-navigation是FaceBook推荐使用的一个库,用于导航效果,官方文档
Helloted
2022/06/07
2.1K0
React Native(二):react-navigation
手把手教你如何自定义 React Native 底部导航栏
如果你觉得 React Navigation 默认 Tab 组件看起来太平淡,或者想创造一些更现代的东西,那么你想法就和我一样。 在本指南中,我将向你演示如何创建自定义标签栏以并与 React Navigation 一起使用。
前端小智@大迁世界
2019/04/25
7.7K0
手把手教你如何自定义 React Native  底部导航栏
【React Native 安卓开发】----侧边栏的实现DrawerLayoutAndroid以及第三方框架react-native-side-menu的使用【第六篇】
做过安卓原生开发的童鞋们应该都做过侧边栏这个东西,而且对于开源框架SlidingMenu和android官方侧滑菜单DrawerLayout应该都不陌生。 那么今天也在这里给大家介绍一下React-Native中的侧滑菜单DrawerLayoutAndroid和第三方框架react-native-side-menu。
先知先觉
2019/01/21
6.8K0
react-native-web
如果使用了 ART,需要安装 react-art(比如,使用了 react-native-svg 来做RN端icon方案,这就是基于 react-art)
conanma
2021/11/02
3K0
基础篇章:React Native 之 View 和 Text 的讲解
(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) 从今天开始我们进入基础组件也就是一些简单控件的学习,之前写的文章貌似太正式了,我正在考虑怎么样才能写的有意思,想想挺难的,算了,写一步算一步吧。今天我们就从最简答的View和Text控件讲起。 View View其实就是UI最基础的组件,跟我们android中的View不同,它更像我们android中的LinearLayout,RN中的View是一个支持Flexbox布局、样式、一些触摸处理和
非著名程序员
2018/02/09
2.6K0
基础篇章:React Native 之 View 和 Text 的讲解
React Native 系列(八) -- 导航
前言 本系列是基于React Native版本号0.44.3写的。我们都知道,一个App不可能只有一个不变的界面,而是通过多个界面间的跳转来呈现不同的内容。那么这篇文章将介绍RN中的导航。 导航 什么是导航? 其本质就是视图之间的界面跳转,例如首页跳转到详情页。 在RN中有两个组件负责实现这样的效果,它们是: NavigatorIOS React Navigation 你可能在很多地方听说过Navigator,这个老组件会逐渐被React Navigation代替。笔者在最后也会讲解一下Navigator
Scott_Mr
2018/05/16
6.1K0
基础篇章:关于 React Native 之 Modal 组件的讲解
(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) Modal是模态视图,它的作用是可以用来覆盖 React Native中根视图的原生视图,Modal模态视图是一种覆盖包围当前内容视图的一个简单方法。 注意:如果你需要如何在您的应用程序的其余部分呈现模态的更多控制,那么可以考虑使用顶级导航(top-level Navigator)。 Modal 属性 照例,我想大家都知道我的习惯了,毕竟官网也是这个顺序,那就是在用人之前,先要了解人,毕竟疑人
非著名程序员
2018/02/09
2.5K0
基础篇章:关于 React Native 之 Modal 组件的讲解
React Native动画详解
在移动开发中,动画是提高用户体验不可缺少的一个元素。在React Native中,动画API提供了一些现成的组件:Animated.View,Animated.Text和Animated.Image默认支持动画。动画API会调用iOS或者Android的本地代码来完成这些组件的位移、大小等动画。 在React Native中,Animated创建过程如下: 创建Animated.Value,设置初始值,比如一个视图的opacity属性,最开始设置Animated.Value(0),来表示动画的开始时候,视图
xiangzhihong
2018/01/26
3.5K0
MobX 在 React Native开发中的应用
MobX 是一款精准的状态管理工具库,如果你在 React 和 React Native 应用中使用过 Flux、Alt、Redux 和 Reflux,那毫不犹豫地说,MobX 的简单性将成为你状态管
xiangzhihong
2018/01/26
12.4K0
推荐阅读
相关推荐
React Native之react-native-scrollable-tab-view详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文