Pandas基本用法

Pandas 数据结构

Series 是一种一维数组,和 NumPy 里的数组很相似。事实上,Series 基本上就是基于 NumPy 的数组对象来的。和 NumPy 的数组不同,Series 能为数据自定义标签,也就是索引(index),然后通过索引来访问数组中的数据。

创建一个 Series 的基本语法如下:

上面的 data 参数可以是任意数据对象,比如字典、列表甚至是 NumPy 数组,而index 参数则是对 data 的索引值,类似字典的 key。index 参数是可省略的,你可以选择不输入这个参数。如果不带 index 参数,Pandas 会自动用默认 index 进行索引,类似数组,索引值是 [0, ..., len(data) - 1] 

从 Python 字典对象创建 Series:如果你从一个 Python 字典对象创建 Series,Pandas 会自动把字典的键值设置成 Series 的 index,并将对应的 values 放在和索引对应的 data 里

从 Series 里获取数据

访问 Series 里的数据的方式,和 Python 字典基本一样:

对 Series 进行算术运算操作

对 Series 的算术运算都是基于 index 进行的。我们可以用加减乘除(+ - * /)这样的运算符对两个 Series 进行运算,Pandas 将会根据索引 index,对响应的数据进行计算,结果将会以浮点数的形式存储,以避免丢失精度。如果 Pandas 在两个 Series 里找不到相同的 index,对应的位置就返回一个空值 NaN。

DataFrames

Pandas 的 DataFrame(数据表)是一种 2 维数据结构,数据以表格的形式存储,分成若干行和列。通过 DataFrame,你能很方便地处理数据。常见的操作比如选取、替换行或列的数据,还能重组数据表、修改索引、多重筛选等。

我们基本上可以把 DataFrame 理解成一组采用同样索引的 Series 的集合。

Series 来构建一个DataFrame:

字典来创建 DataFrame:

获取 DataFrame 中的列

要获取一列的数据,还是用中括号 [] 的方式,跟 Series 类似。比如尝试获取上面这个表中的 name 列数据:因为我们只获取一列,所以返回的就是一个 Series。

如果获取多个列,那返回的就是一个 DataFrame 类型:

向 DataFrame 里增加数据列

增加数据列有两种办法:可以从头开始定义一个 pd.Series,再把它放到表中,也可以利用现有的列来产生需要的新列。

从 DataFrame 里删除行/列

想要删除某一行或一列,可以用 .drop() 函数。在使用这个函数的时候,你需要先指定具体的删除方向,axis=0 对应的是行 row,而 axis=1 对应的是列 column 。

除非用户明确指定,否则在调用 .drop() 的时候,Pandas 并不会真的永久性地删除这行/列。这主要是为了防止用户误操作丢失数据。如果你确定要永久性删除某一行/列,你需要加上 inplace=True 参数。

获取 DataFrame 中的一行或多行数据

要获取某一行,你需要用 .loc[] 来按索引(标签名)引用这一行,或者用 .iloc[],按这行在表中的位置(行数)来引用。

同时你可以用 .loc[] 来指定具体的行列范围,并生成一个子数据表,就像在 NumPy里做的一样。此外,你还可以制定多行和/或多列

条件筛选

用中括号 [] 的方式,除了直接指定选中某些列外,还能接收一个条件语句,然后筛选出符合条件的行/列。

比如,我们希望在下面这个表格中筛选出 'W'>0 的行:

你还可以试试这样的语句 df[df['W']>0][['X','Y']] 

你可以用逻辑运算符 &(与)和 |(或)来链接多个条件语句,以便一次应用多个筛选条件到当前的 DataFrame 上

重置 DataFrame 的索引

如果你觉得当前 DataFrame 的索引有问题,你可以用 .reset_index() 简单地把整个表的索引都重置掉。这个方法将把目标 DataFrame 的索引保存在一个叫 index 的列中,而把表格的索引变成默认的从零开始的数字,也就是 [0, ..., len(data) - 1] 。.reset_index() 并不会永久改变你表格的索引,除非你调用的时候明确传入了 inplace 参数。

设置 DataFrame 的索引值

我们还可以用 .set_index() 方法,将 DataFrame 里的某一列作为索引来用。不像 .reset_index() 会保留一个备份,然后才用默认的索引值代替原索引,.set_index() 将会完全覆盖原来的索引值。

多级索引(MultiIndex)以及命名索引的不同等级

多级索引其实就是一个由元组(Tuple)组成的数组,每一个元组都是独一无二的。你可以从一个包含许多数组的列表中创建多级索引(调用 MultiIndex.from_arrays ),也可以用一个包含许多元组的数组(调用 MultiIndex.from_tuples )或者是用一对可迭代对象的集合(比如两个列表,互相两两配对)来构建(调用MultiIndex.from_product )

要获取多级索引中的数据,还是用到 .loc[] 。

df 这个 DataFrame 的头两个索引列没有名字,看起来不太易懂。我们可以用 .index.names 给它们加上名字

交叉选择行和列中的数据

我们可以用 .xs() 方法轻松获取到多级索引中某些特定级别的数据。

清洗数据

删除或填充空值

在 DataFrame 中缺少数据的位置, Pandas 会自动填入一个空值,比如 NaN或 Null 。因此,我们可以选择用 .dropna() 来丢弃这些自动填充的值,或是用.fillna() 来自动给这些空值填充数据。

使用 .dropna() 方法时,就是告诉 Pandas 删除掉存在一个或多个空值的行(或者列)。删除列用的是 .dropna(axis=0) ,删除行用的是 .dropna(axis=1) 。

如果你使用 .fillna() 方法,Pandas 将对这个 DataFrame 里所有的空值位置填上你指定的默认值。

这有的时候打击范围太大了。于是我们可以选择只对某些特定的行或者列进行填充。

分组统计

Pandas 的分组统计功能可以按某一列的内容对数据行进行分组,并对其应用统计函数,比如求和,平均数,中位数,标准差等等…

举例来说,用 .groupby() 方法,我们可以对下面这数据表按 'Company' 列进行分组,并用 .mean() 求每组的平均值:

计数

用 .count() 方法,能对 DataFrame 中的某个元素出现的次数进行计数

数据描述

Pandas 的 .describe() 方法将对 DataFrame 里的数据进行分析,并一次性生成多个描述性的统计指标,方便用户对数据有一个直观上的认识。

生成的指标,从左到右分别是:计数、平均数、标准差、最小值、25% 50% 75% 位置的值、最大值。

堆叠(Concat)

堆叠基本上就是简单地把多个 DataFrame 堆在一起,拼成一个更大的 DataFrame。当你进行堆叠的时候,请务必注意你数据表的索引和列的延伸方向,堆叠的方向要和它一致。

因为我们没有指定堆叠的方向,Pandas 默认按行的方向堆叠,把每个表的索引按顺序叠加。如果你想要按列的方向堆叠,那你需要传入 axis=1 参数

归并(Merge)

使用 pd.merge() 函数,能将多个 DataFrame 归并在一起,它的合并方式类似合并 SQL 数据表的方式。

归并操作的基本语法是 pd.merge(left, right, how='inner', on='Key') 。其中 left 参数代表放在左侧的 DataFrame,而 right 参数代表放在右边的 DataFrame;how='inner' 指的是当左右两个 DataFrame 中存在不重合的 Key 时,取结果的方式:inner 代表交集;Outer 代表并集。最后,on='Key' 代表需要合并的键值所在的列,最后整个表格会以该列为准进行归并。同时,我们可以传入多个 on 参数,这样就能按多个键值进行归并。

连接(Join)

如果你要把两个表连在一起,然而它们之间没有太多共同的列,那么你可以试试 .join() 方法。和 .merge() 不同,连接采用索引作为公共的键,而不是某一列。同样,inner 代表交集,Outer 代表并集。

数值处理

查找不重复的值

不重复的值,在一个 DataFrame 里往往是独一无二,与众不同的。找到不重复的值,在数据分析中有助于避免样本偏差。在 Pandas 里,主要用到 3 种方法:

首先是 .unique() 方法

我们还能用 .nunique() 方法,获取所有不重复值的个数

可以用 .value_counts() 同时获得所有值和对应值的计数

apply() 方法

用 .apply() 方法,可以对 DataFrame 中的数据应用自定义函数,进行数据处理。也可以调用任意的内置函数。我们可以用 lambda 表达式来代替函数定义,简化代码。

获取 DataFrame 的属性

DataFrame 的属性包括列和索引的名字。假如你不确定表中的某个列名是否含有空格之类的字符,你可以通过 .columns 来获取属性值,以查看具体的列名。

排序

如果想要将整个表按某一列的值进行排序,可以用 .sort_values() 

查找空值

假如你有一个很大的数据集,你可以用 Pandas 的 .isnull() 方法,方便快捷地发现表中的空值:这返回的是一个新的 DataFrame,里面用布尔值(True/False)表示原 DataFrame 中对应位置的数据是否是空值。

数据透视表

数据透视表是一种汇总统计表,它展现了原表格中数据的汇总统计结果。Pandas 的数据透视表能自动帮你对数据进行分组、切片、筛选、排序、计数、求和或取平均值,并将结果直观地显示出来。

Pandas 数据透视表的语法是 .pivot_table(data, values='', index=[''], columns=['']) ,其中 values 代表我们需要汇总统计的数据点所在的列,index 表示按该列进行分组索引,而 columns 则表示最后结果将按该列的数据进行分列。

导入导出数据

读取 CSV 文件

只要用 pd.read_csv() 就能将 CSV 文件里的数据转换成 DataFrame 对象

写入 CSV 文件

将 DataFrame 对象存入 .csv 文件的方法是 .to_csv(),传入 index=False 参数是因为不希望 Pandas 把索引列的 0~5 也存到文件中。

读取 Excel 表格文件

使用 pd.read_excel() 方法,我们能将 Excel 表格中的数据导入 Pandas 中。请注意,Pandas 只能导入表格文件中的数据,其他对象,例如宏、图形和公式等都不会被导入。如果文件中存在有此类对象,可能会导致 pd.read_excel() 方法执行失败。每个 Excel 表格文件都含有一个或多个工作表,传入 sheet_name='Sheet1' 这样的参数,就表示只读取 'excel_output.xlsx' 中的 Sheet1 工作表中的内容。

写入 Excel 表格文件

跟写入 CSV 文件类似,我们可以将一个 DataFrame 对象存成 .xlsx 文件,语法是 .to_excel() :

读取 HTML 文件中的数据

为了读取 HTML 文件,你需要安装 htmllib5,lxml 以及 BeautifulSoup4 库

我们用让 Pandas 读取这个页面的数据: https://en.wikipedia.org/wiki/Udacity 。由于一个页面上含有多个不同的表格,我们需要通过下标 [0, ..., len(tables) - 1] 访问数组中的不同元素。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值