本文是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 DF 到new.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'])
上面的代码将给出以下结果:
在下面,我们将一个 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)
以上将输出以下结果:
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])
该代码将输出以下内容:
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:])
上述代码的输出将是:
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])
上述代码的输出将是:
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])
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 个主要组件组成,data ,rows 和columns 。
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'])
上面的代码,将输出以下内容:
import pandas as pd
data = {'Name':['C','Sharp','Corner'], 'Age':[20,21,22]}
df = pd.DataFrame(data)
上面的代码,将输出以下内容:
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']])
上面的代码,将输出以下内容:
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)
上述代码的输出将是:
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()
上面的代码将输出以下内容:
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)
上述代码的输出将是:
在上面的代码中,我们将所有“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()
上述代码的输出将是:
在上面的输出中,我们用之前的值替换了 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()
上述代码的输出将是:
在上面的输出中,我们执行了线性插值。由于在第 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()
上述代码的输出将是:
在上面的输出中,您可以看到输出中只有第 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()
上述代码的输出将是:
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 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 进行互操作。