Python 机器学习-Python 库:Pandas

作者 : 慕源网 本文共10990个字,预计阅读时间需要28分钟 发布时间: 2021-10-18 共185人阅读

Python 机器学习-Python 库:Pandas

本文是Python 机器学习系列的一部分。您可以在此处找到本系列之前所有帖子的链接

Python PANDAS

在上一章中,我们研究了 Python NumPy、它的函数和它们的 Python 实现。在本章中,我们将从下一个非常有用且重要的 Python 机器学习库“Python Pandas”开始。

我们将介绍一些 Pandas 函数及其 Python 实现。

Python 中的 Pandas 是什么?

Pandas 是为 Python 编程语言编写的用于数据操作和分析的软件库。特别是,它提供了用于操作数值表和时间序列的数据结构和操作。它是在三条款 BSD 许可下发布的免费软件。该名称源自术语“面板数据”,该术语表示包含同一个人在多个时期内的观察的数据集。

原作者是韦斯麦金尼。Pandas 于 2008 年 1 月 11 日首次发布。官方网站是www.pandas.pydata.org

Pandas 在 Python 中的使用

  • DataFrame 对象,用于具有集成索引的数据操作。
  • 用于在内存数据结构和不同文件格式之间读写数据的工具。
  • 数据对齐和缺失数据的综合处理。计量经济学
  • 数据集的重塑和旋转。
  • 基于标签的切片、花哨的索引和大型数据集的子集。
  • 数据结构列插入和删除。
  • 按引擎分组,允许对数据集进行拆分-应用-组合操作。
  • 数据集合并和加入。
  • 层次轴索引以处理低维数据结构中的高维数据。
  • 时间序列功能:日期范围生成和频率转换、移动窗口统计、移动窗口线性回归、日期偏移和滞后。
  • 提供数据过滤。

在 Python 中安装 Pandas

1. Ubuntu/Linux

sudo apt update -y    
sudo apt upgrade -y    
sudo apt install python3-tk python3-pip -y    
sudo pip install numpy -y  

2. Anaconda 提示

conda install -c anaconda pandas  

使用 Python Pandas 进行输入和输出

1.CSV读写

pandas.read_csv()

此函数用于读取 CSV 或逗号分隔值文件

句法

pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]], sep=’,’, delimiter=None, header=’infer’, names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression=’infer’, thousands=None, decimal=b’.’, lineterminator=None, quotechar='”‘, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)\

import pandas as pd    
df = pd.read_csv('titanic.csv', header=None, nrows=10)    
print(df)   

在上面的代码中,我们正在读取 ‘titanic.csv’ 文件并将其转换为 DataFrame 对象

DataFrame.to_csv()

此函数用于写入 CSV 或逗号分隔值文件

句法

DataFrame.to_csv(self, path_or_buf=None, sep=’, ‘, na_rep=”, float_format=None, columns=None, header=True, index=True, index_label=None, mode=’w’, encoding=None, compression=’infer’, quoting=None, quotechar='”‘, line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal=’.’)

import pandas as pd      
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22], 'Address':['Delhi','Kanpur','Tamil Nadu']}      
df = pd.DataFrame(data)   
df.to_csv('new.csv')  

上面的代码将创建一个名为new.csv的新文件,其中将包含数据

2. Excel 读写

pandas.read_excel()

这个函数是用来读取excel文件的

句法

pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skip_footer=0, skipfooter=0, convert_float=True, mangle_dupe_cols=True, **kwds)

import pandas as pd  
df = pd.read_excel('titanic.xlsx', header=None, nrows=10)  
print(df) 

上面的代码将从titanic.xslx读取10行并将它们写入DataFrame df

pandas.to_excel()

这是用于写入excel文件的函数

句法

DataFrame.to_excel(self, excel_writer, sheet_name=’Sheet1′, na_rep=”, float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep=’inf’, verbose=True, freeze_panes=None)

import pandas as pd      
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22], 'Address':['Delhi','Kanpur','Tamil Nadu']}      
df = pd.DataFrame(data)   
df.to_excel('new.xlsx')  

上面的代码会写pandas.DataFrame DFnew.xlsx

3. JSON 读写

pandas.read_json() 

此函数用于读取 JSON 或 JavaScript Object Notation 文件

句法

pandas.read_json(path_or_buf=None, orient=None, typ=’frame’, dtype=None, convert_axes=None, convert_dates=True, keep_default_dates=True, numpy=False, precise_float=False, date_unit=None, encoding=None, lines=False, chunksize=None, compression=’infer’)

import pandas as pd  
df = pd.read_json('titanic.json')  
print(df)  

上面的代码将读取titanic.json文件并将数据转换为pandas.DataFrame对象

DataFrame.to_json()

此函数用于写入 JSON 或 JavaScript Object Notation 文件

句法

DataFrame.to_json(self, path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit=’ms’, default_handler=None, lines=False, compression=’infer’, index=True

import pandas as pd      
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22], 'Address':['Delhi','Kanpur','Tamil Nadu']}      
df = pd.DataFrame(data)   
df.to_json('new.json')  

以上将pandas.DataFrame转换为json并写入titanic.json

Pandas数据结构

1.Pandas Series

句法

pandas.Series(data=None,index=None, dtype=None, name=None, copy=False, fastpath=False) 

它是一个带标签的一维 ndarray,这些标签可以是唯一的,但没有强制要求它们是唯一的。它支持整数和基于标签的索引。Pandas 系列有很多方法可以对其进行各种操作。

import pandas as pd  
s = pd.Series([1, 2, 3, 4], index = ['A', 'B', 'C', 'D']) 

上面的代码将给出以下结果:

Python 机器学习-Python 库:Pandas

在下面,我们将一个 numpy ndarray 转换为 Pandas series

import pandas as pd  
import numpy as np  
data = np.array(['c','s','h','a','r','p'])  
s = pd.Series(data)  
print (s)  

以上将输出以下结果:

Python 机器学习-Python 库:Pandas

pandas 系列的默认索引是 0, 1, 2 …..

Pandas Series 切片

切片意味着只提取给定数据结构的一部分

import pandas as pd    
import numpy as np    
data = np.array(['c','s','h','a','r','p','c','o','r','n','e','r'])    
s = pd.Series(data)    
print(s[:4])    

该代码将输出以下内容:

Python 机器学习-Python 库:Pandas
import pandas as pd  
import numpy as np  
data = np.array(['c','s','h','a','r','p','c','o','r','n','e','r'])  
s = pd.Series(data)  
print(s[5:])  

上述代码的输出将是:

Python 机器学习-Python 库:Pandas
import pandas as pd    
import numpy as np    
data = np.array(['c','s','h','a','r','p','c','o','r','n','e','r'])    
s = pd.Series(data)    
print(s[1:6])   

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

import pandas as pd      
import numpy as np      
data = np.array(['c','s','h','a','r','p','c','o','r','n','e','r'])      
s = pd.Series(data)      
print(s[6])   
  • 上面代码的输出将是 c

Python Pandas 系列函数

以下是pandas系列库下的功能列表

功能 描述
add() 用于向调用者系列添加相同长度的系列或类似列表的对象
sub() 它用于从调用者系列中减去具有相同长度的系列或类似列表的对象
mul() 用于乘以与调用者系列相同长度的系列或类似列表的对象
div() 用于通过调用者系列划分具有相同长度的系列或类似列表的对象
sum() 它返回请求轴的值的总和
prod() 它返回所请求轴的值的乘积
mean() 它返回请求轴的值的平均值
pow() 用于将传递的系列的每个元素作为调用者系列的指数幂并返回结果
abs() 用于获取Series/DataFrame中每个元素的绝对数值
conv() 用于返回两个系列的协方差
combine_first() 用于将两个系列合二为一
count() 它返回系列中非 NA/空观察的数量
size() 它返回底层数据中的元素数
name() 它用于为系列对象(即列)命名
is_unique() 如果对象中的值是唯一的,则返回布尔值
idxmax() 用于提取系列中最高值的索引位置
idxmin()
它用于提取系列中最低值的索引位置
sort_values() 它用于按升序或降序对系列的值进行排序
sort_index() 用于按升序或降序对系列的索引进行排序
head() 它用于从系列的开头返回一系列指定数量的行
tail() 它用于从系列的末尾返回一系列指定数量的行
le() 它用于将调用者系列的每个元素与传递的系列进行比较。对于小于或等于传递系列中的元素的每个元素,它返回 true
ne() 它用于将调用者系列的每个元素与传递的系列进行比较。它为每个不等于传递系列中的元素的元素返回 true
ge() 它用于将调用者系列的每个元素与传递的系列进行比较。对于大于或等于传递的系列中的元素的每个元素,它返回 true
eq() 它用于将调用者系列的每个元素与传递的系列进行比较。对于与传递的系列中的元素相等的每个元素,它返回 true
gt() 它用于将调用者系列的每个元素与传递的系列进行比较。对于大于传递系列中的元素的每个元素,它返回 true
lt() 它用于将调用者系列的每个元素与传递的系列进行比较。对于小于传递系列中的元素的每个元素,它返回 true
clip() 它用于裁剪低于和高于传递的最小值和最大值的值
clip_lower() 它用于裁剪低于传递的最小值的值
clip_upper() 它用于裁剪高于通过的最大值的值
astype() 它用于更改系列的类型
tolist() 它用于将系列转换为列表
get() 它用于从系列中提取值
unique() 它用于查看特定列中的唯一值
nunique() 它用于计算唯一值
value_counts() 它用于计算每个唯一值在系列中出现的次数
factorize() 它用于通过识别不同的值来获取数组的数字表示(然后将其转换为系列)
map() 它用于将一个对象的值绑定到另一个对象
between() 它用于检查哪些值位于第一个和第二个参数之间
apply() 它用于执行未包含在 pandas 或 numpy 中的自定义操作

2. Pandas DataFrame

它是一个二维大小可变、潜在异构的表格标记数据结构,具有潜在不同类型的列。

Pandas DataFrame 由 3 个主要组件组成,datarowscolumns

Pandas DataFrame 输出自动插入索引,默认索引为 1,2,3 ……

data = {'Country': ['Belgium',  'India',  'Brazil'],'Capital': ['Brussels',  'New Delhi',  'Brasilia'],'Population': [11190846, 1303171035, 207847528]}  
df = pd.DataFrame(data,columns=['Country',  'Capital',  'Population'])  

上面的代码,将输出以下内容:

Python 机器学习-Python 库:Pandas

import pandas as pd  
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22]}  
df = pd.DataFrame(data)  

上面的代码,将输出以下内容:

Python 机器学习-Python 库:Pandas

Pandas DataFrame 列选择

import pandas as pd    
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22], 'Address':['Delhi','Kanpur','Tamil Nadu']}    
df = pd.DataFrame(data)  
print(df[['Name','Address']])  

上面的代码,将输出以下内容:

Python 机器学习-Python 库:Pandas

Pandas DataFrame 行选择

import pandas as pd      
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22], 'Address':['Delhi','Kanpur','Tamil Nadu']}      
df = pd.DataFrame(data)    
data1= df.loc[0]  
print(data1)  

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

Pandas DataFrame 检查缺失数据值

为了处理缺失值,我们使用了两个功能,即isnull()notnull()

1. isnull()

此函数检查 DataFrame 元素是否为空。如果数据丢失则返回true,否则返回false

2.notnull()

此函数检查 DataFrame 元素是否不为空。如果数据丢失则返回false,否则返回true

import pandas as pd  
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22], 'Address':['Delhi','Kanpur','Tamil Nadu']}   
df = pd.DataFrame(data)  
df.isnull()  

上面的代码将输出以下内容:

Python 机器学习-Python 库:Pandas

Pandas DataFrame 填充缺失值

早些时候我们检查了值是否为空,如果缺少任何值,那么我们可以使用fillna(),replace()interpolate()

1.DataFrame.fillna()

句法

fillna(self, value=None, method=None, axis=None, inplace=None, limit=None, downcast=None, **kwargs)

此函数将用传递的值替换 NaN 值

import pandas as pd  
import numpy as np  
data = {'Name':[np.nan,'Sharp','Corner'], 'Age':[20,np.nan,22], 'Address':[np.nan,'Kanpur','Tamil Nadu']}   
df = pd.DataFrame(data)  
df.fillna(0)  

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

在上面的代码中,我们将所有“NaN”值替换为“0”

2.DataFrame.replace()

句法

replace(self, to_replace=None, value =None, inplace=None, Limit=None, regex=None, method=’pad’)

DataFrame 的值被动态替换为其他值。

import pandas as pd  
import numpy as np  
data = {'Name':[np.nan,'Sharp','Corner'], 'Age':[20,np.nan,22], 'Address':[np.nan,'Kanpur','Tamil Nadu']}   
df = pd.DataFrame(data)  
df.replace()  

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

在上面的输出中,我们用之前的值替换了 NaN 值

3.DataFrame.interpolate()

句法

interpolate(self, method=’linear’, axis=0, limit=None, inplace=False, limit_direction=’forward’, limit_area=None, downcast=None, **kwargs)

此函数用于根据不同的插值技术填充 NA 值

import pandas as pd  
import numpy as np  
data = {'Name':[np.nan,'Sharp','Corner'], 'Age':[20,np.nan,22], 'Address':[np.nan,'Kanpur','Tamil Nadu']}   
df = pd.DataFrame(data)  
df.interpolate()  

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

在上面的输出中,我们执行了线性插值。由于在第 0 行时我们没有任何先前的值,因此它们不能用插值替换。

Pandas DataFrame 丢弃缺失值

人们经常看到,拥有不完整的知识比没有知识更危险。所以为了避免这种情况,我们删除不完整的数据,只保留那些本身完整的数据行。为此,我们使用dropna().

import pandas as pd  
import numpy as np  
data = {'Name':[np.nan,'Sharp','Corner'], 'Age':[20,np.nan,22], 'Address':[np.nan,'Kanpur','Tamil Nadu']}   
df = pd.DataFrame(data)  
df.dropna()  

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

在上面的输出中,您可以看到输出中只有第 2 行,这是因为第 0 行和第 1 行具有 NaN 值。

1. 迭代 Pandas DataFrame 行

DataFrame.iterrows()

它用于获取每行的每个元素

import pandas as pd  
import numpy as np  
data = {'Name':[np.nan,'Sharp','Corner'], 'Age':[20,np.nan,22], 'Address':[np.nan,'Kanpur','Tamil Nadu']}   
df = pd.DataFrame(data)  
for i, j in df.iterrows():  
  print(i,j)  
  print()  

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

2. 迭代 Pandas DataFrame 行

DataFrame.iterrows()

它用于获取每行的每个元素

import pandas as pd  
import numpy as np  
data = {'Name':[np.nan,'Sharp','Corner'], 'Age':[20,np.nan,22], 'Address':[np.nan,'Kanpur','Tamil Nadu']}   
df = pd.DataFrame(data)  
col = list(df)  
for i in col:  
  print(df[i]) 

上述代码的输出将是:

Python 机器学习-Python 库:Pandas

Python Pandas DataFrame 函数

以下是pandas series 库下的功能列表

功能 描述
index() 它返回 DataFrame 的索引(行标签)
insert() 它将克隆插入到 DataFrame 中
add() 它返回 DataFrame 和其他元素的加法,相当于二进制加法
sub() 它返回DataFrame和其他元素的减法,它相当于二进制子
mul() 它返回 DataFrame 和其他元素的乘法,它相当于二进制 mul
div() 它返回DataFrame和其他的浮动除法,元素方面,相当于二进制truediv
unique() 它提取 DataFrame 中的唯一值
nunique() 它返回 DataFrame 中唯一值的计数
value_counts() 它计算每个唯一值在系列中出现的次数
columns() 它返回 DataFrame 的列标签
axes() 它返回一个表示 DataFrame 轴的列表
isnull() 它创建了一个布尔系列,用于提取具有空值的行
notnull() 它创建一个布尔系列,用于提取具有非空值的行
between() 它提取列值落在预定义范围之间的行
isin() 它从 DataFrame 中提取行,其中列值存在于预定义的集合中
dtypes() 它返回一个具有每列数据类型的系列。结果的索引是原始 DataFrame 的列
astypes() 它转换系​​列中的数据类型
values() 它返回 DataFrame 的 Numpy 表示,即轴标签将被删除
sort_values()- Set, Set2 它按传递列的升序或降序对 DataFrame 进行排序
sort_index() 它根据索引位置或标签而不是它们的值对 DataFrame 中的值进行排序,但有时一个 DataFrame 由两个或多个 DataFrame 组成,因此可以使用此方法更改以后的索引
loc() 它根据索引标签检索行
iloc() 它根据索引位置检索行
ix() 它根据索引标签或索引位置检索 DataFrame 行。这种方法是 loc() 和 iloc() 方法的最佳组合
rename() 它用于更改索引标签或列名称的名称
columns() 它用于更改列名
drop() 它用于从 DataFrame 中删除行或列
pop() 它用于从 DataFrame 中删除行和列
sample() 它从 DataFrame 中提取随机的行或列样本
nsmallest() 它拉出列中具有最小值的行
nlargest() 它拉出列中具有最大值的行
shape() 它返回一个表示 DataFrame 维度的元组
ndim() 它返回一个代表轴数/数组维数的“int”
rank() 它返回一个系列中的值可以使用此方法按顺序排列
query() 它是一种替代的基于字符串的语法,用于从 DataFrame 中提取子集
copy() 它创建了一个独立的 pandas 对象副本
duplicated() 它创建一个布尔系列并使用它来提取具有重复值的行
drop_duplicates() 它是 ‘duplicated()’ 的替代品,具有通过过滤去除它们的能力
set_index() 它使用一个或多个现有列设置 DataFrame 索引(行标签)
reset_index() 它重置 DataFrame 的索引
where() 它用于检查 DataFrame 的一个或多个条件并相应地返回结果

结论

在本章中,我们学习了 Python Pandas。在下一章中,我们将学习 Python Scikit-Learn。

Python Scikit-Learn 具有各种分类、回归和聚类算法,旨在与 Python 数值和科学库 NumPy 和 SciPy 进行互操作。


慕源网 » Python 机器学习-Python 库:Pandas

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录