Python Pandas模块教程
Python Pandas模块
Pandas是Python中的开源库。
它提供了随时可用的高性能数据结构和数据分析工具。Pandas模块在NumPy之上运行,并且广泛用于数据科学和数据分析。
NumPy是一种低级数据结构,支持多维数组和广泛的数学数组运算。
Pandas 具有更高级别的界面。
它还提供了表格数据的简化对齐和强大的时间序列功能。DataFrame是Pandas中的关键数据结构。
它允许我们将表格数据存储和处理为二维数据结构。Pandas 在DataFrame上提供了丰富的功能集。
例如,数据对齐,数据统计,切片,分组,合并,串联数据等。
Pandas 安装和入门
您需要安装Python 2.7及更高版本才能安装Pandas模块。
如果您使用的是conda,则可以使用以下命令进行安装。
conda install pandas
如果使用的是PIP,请运行以下命令以安装pandas模块。
pip3.7 install pandas
Python安装Pandas 模块
要在您的Python脚本中导入Pandas和NumPy,请添加以下代码:
import pandas as pd import numpy as np
由于Pandas依赖于NumPy库,因此我们需要导入此依赖关系。
Pandas 模块中的数据结构
Pandas模块提供了3种数据结构,如下所示:
系列:它是一维大小不变的数组,具有类似的数据结构。
DataFrames:这是一个二维大小可变的表格结构,具有异构类型的列。
面板:这是一个3D,大小可变的数组。
Pandas 数据框
DataFrame是最重要且使用最广泛的数据结构,是存储数据的标准方法。
DataFrame的数据按行和列对齐,例如SQL表或者电子表格数据库。
我们既可以将数据硬编码到DataFrame中,也可以导入CSV文件,tsv文件,Excel文件,SQL表等。
我们可以使用以下构造函数创建一个DataFrame对象。
pandas.DataFrame(data, index, columns, dtype, copy)
以下是参数的简短说明:
数据–根据输入数据创建一个DataFrame对象。
它可以是列表,字典,系列,Numpy ndarray甚至其他任何DataFrame。索引–具有行标签
列–用于创建列标签
dtype –用于指定每列的数据类型,可选参数
复制–用于复制数据(如果有)
有多种创建DataFrame的方法。
我们可以从字典或者词典列表中创建DataFrame对象。
我们还可以从元组,CSV,Excel文件等的列表中创建它。
让我们运行一个简单的代码,从词典列表中创建一个DataFrame。
import pandas as pd import numpy as np df = pd.DataFrame({ "State": ['Andhra Pradesh', 'Maharashtra', 'Karnataka', 'Kerala', 'Tamil Nadu'], "Capital": ['Hyderabad', 'Mumbai', 'Bengaluru', 'Trivandrum', 'Chennai'], "Literacy %": [89, 77, 82, 97,85], "Avg High Temp(c)": [33, 30, 29, 31, 32 ] }) print(df)
第一步是创建字典。
第二步是将字典作为参数传递给DataFrame()方法。
最后一步是打印DataFrame。
如您所见,可以将DataFrame与具有异构值的表进行比较。
另外,可以修改DataFrame的大小。
我们以地图的形式提供了数据,并且Pandas 将地图的键视为行标签。
索引显示在最左侧的列中,并具有行标签。
列标题和数据以表格形式显示。
也可以创建索引的DataFrame。
这可以通过在DataFrame()方法中配置index参数来完成。
将数据从CSV导入到DataFrame
我们还可以通过导入CSV文件来创建DataFrame。
CSV文件是一种文本文件,每行有一条数据记录。
记录中的值使用"逗号"分隔。
Pandas提供了一种有用的方法,名为" read_csv()",用于将CSV文件的内容读取到DataFrame中。
例如,我们可以创建一个名为" cities.csv"的文件,其中包含旧金山城市的详细信息。
CSV文件存储在包含Python脚本的同一目录中。
可以使用以下命令导入该文件:
import pandas as pd data = pd.read_csv('cities.csv') print(data)
我们的目标是加载数据并进行分析以得出结论。
因此,我们可以使用任何方便的方法来加载数据。
在本教程中,我们将对DataFrame的数据进行硬编码。
在DataFrame中检查数据
使用其名称运行DataFrame将显示整个表。
实时地,要分析的数据集将具有数千行。
为了分析数据,我们需要检查来自大量数据集的数据。
Pandas 提供了许多有用的功能,可以仅检查我们需要的数据。
我们可以使用df.head(n)获取前n行,或者使用df.tail(n)打印后n行。
例如,下面的代码打印DataFrame的前2行和后1行。
print(df.head(2))
print(df.tail(1))
同样,print(df.dtypes)
打印数据类型。
print(df.index)
打印索引。
print(df.columns)打印DataFrame的列。
print(df.values)显示表格值。
1.获取记录的统计摘要
我们可以使用df.describe()函数获得数据的统计摘要(计数,均值,标准差,最小值,最大值等)。
现在,让我们使用此功能来显示"识字率"列的统计摘要。
为此,我们可以添加以下代码:
print(df['Literacy %'].describe())
df.describe()函数显示统计摘要以及数据类型。
2.排序记录
我们可以使用df.sort_values()
函数按任何列对记录进行排序。
例如,让我们按降序对"识字率%"列进行排序。
print(df.sort_values('Literacy %', ascending=False))
输出:
3.切片记录
通过使用列名,可以提取特定列的数据。
例如,要提取"资本"列,我们使用:
df['Capital']
或者
(df.Capital)
输出:
也可以切片多列。
这是通过将多个列名称括在2个方括号中来完成的,列名称之间用逗号分隔。
以下代码对DataFrame的"状态"和"资本"列进行了切片。
print(df[['State', 'Capital']])
输出:
也可以切片行。
可以使用":"运算符选择多行。
下面的代码返回前3行。
df[0:3]
输出:
Pandas库的一个有趣功能是使用iloc [0]
函数根据行和列标签选择数据。
很多时候,我们可能只需要很少的列即可进行分析。
我们也可以使用loc ['index_one'])通过索引选择。
例如,要选择第二行,可以使用df.iloc [1,:**
。
假设我们需要选择第二列的第二个元素。
这可以通过使用df.iloc [1,1]函数来完成。
在本例中,函数df.iloc [1,1]显示"孟买"作为输出。
4.过滤数据
也可以根据列值进行过滤。
例如,以下代码过滤识字率高于90%的列。
print(df[df['Literacy %']>90])
可以使用任何比较运算符根据条件进行过滤。
过滤数据的另一种方法是使用" isin"。
以下是仅过滤两个州"卡纳塔克邦"和"泰米尔纳德邦"的代码。
print(df[df['State'].isin(['Karnataka', 'Tamil Nadu'])])
5.重命名列
可以使用df.rename()函数来重命名列。
该函数将旧列名和新列名作为参数。
例如,让我们将"扫盲率"列重命名为"扫盲率"。
df.rename(columns = {'Literacy %':'Literacy percentage'}, inplace=True) print(df.head())
参数inplace = True
对DataFrame进行更改。
6.数据整理
数据科学涉及数据的处理,以便数据可以与数据算法很好地配合使用。
数据整理是处理数据的过程,例如合并,分组和串联。
Pandas库提供有用的功能,例如merge()
,groupby()
和concat()
来支持数据整理任务。
让我们创建2个数据框并显示数据整理功能以更好地理解它。
import pandas as pd d = { 'Employee_id': ['1', '2', '3', '4', '5'], 'Employee_name': ['Akshar', 'Jones', 'Kate', 'Mike', 'Tina'] } df1 = pd.DataFrame(d, columns=['Employee_id', 'Employee_name']) print(df1)
让我们使用以下代码创建第二个DataFrame:
import pandas as pd data = { 'Employee_id': ['4', '5', '6', '7', '8'], 'Employee_name': ['Meera', 'Tia', 'Varsha', 'Williams', 'Ziva'] } df2 = pd.DataFrame(data, columns=['Employee_id', 'Employee_name']) print(df2)
合并
现在,让我们使用merge()
函数合并我们创建的2个数据框以及'Employee_id'的值:
print(pd.merge(df1, df2, on='Employee_id'))
我们可以看到merge()函数从合并时使用的两个具有相同列值的DataFrames中返回行。
分组
分组是将数据收集到不同类别的过程。
例如,在下面的示例中," Employee_Name"字段的名称两次为" Meera"。
因此,让我们按" Employee_name"列对其进行分组。
import pandas as pd import numpy as np data = { 'Employee_id': ['4', '5', '6', '7', '8'], 'Employee_name': ['Meera', 'Meera', 'Varsha', 'Williams', 'Ziva'] } df2 = pd.DataFrame(data) group = df2.groupby('Employee_name') print(group.get_group('Meera'))
值" Meera"的" Employee_name"字段按" Employee_name"列分组。
级联
串联数据涉及将一组数据添加到另一组。
Pandas提供了一个名为" concat()"的函数来连接DataFrame。
例如,让我们使用以下命令将数据框df1和df2连接起来:
print(pd.concat([df1, df2]))
通过传递Series的Dict创建一个DataFrame
要创建一个Series,我们可以使用pd.Series()
方法并将一个数组传递给它。
让我们创建一个简单的系列,如下所示:
series_sample = pd.Series([100, 200, 300, 400]) print(series_sample)
我们创建了一个系列。
您会看到显示了两列。
第一列包含从0开始的索引值。
第二列包含作为系列传递的元素。
可以通过传递"系列"的字典来创建DataFrame。
让我们创建一个DataFrame,该数据框架是通过合并并传递系列索引来形成的。
例
d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']), 'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])} df = pd.DataFrame(d) print(df)
对于第一个系列,由于我们未指定标签" d",因此会返回NaN。
列选择,添加,删除
可以从DataFrame中选择特定的列。
例如,仅显示第一列,我们可以将以上代码重写为:
d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']), 'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])} df = pd.DataFrame(d) print(df['Matches played'])
也可以将列添加到现有DataFrame中。
例如,下面的代码将一个名为" Runrate"的新列添加到上面的DataFrame中。
d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']), 'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])} df = pd.DataFrame(d) df['Runrate']=pd.Series([80, 70, 60, 50], index=['Sachin', 'Kohli', 'Raina', 'Dravid']) print(df)
我们可以使用delete
和pop
函数来删除列。
例如,要删除上述示例中的"参加的比赛"列,我们可以通过以下两种方式之一进行操作:
del df['Matches played']
或者
df.pop('Matches played')