Python Pandas模块教程

时间:2020-02-23 14:43:08  来源:igfitidea点击:

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)

我们可以使用deletepop函数来删除列。
例如,要删除上述示例中的"参加的比赛"列,我们可以通过以下两种方式之一进行操作:

del df['Matches played']

或者

df.pop('Matches played')