Python Pandas完整教程:从入门到精通的数据分析实战指南

Python中的Pandas模块

  • Pandas is an open source library in Python. It provides ready to use high-performance data structures and data analysis tools.
  • Pandas module runs on top of NumPy and it is popularly used for data science and data analytics.
  • NumPy is a low-level data structure that supports multi-dimensional arrays and a wide range of mathematical array operations. Pandas has a higher-level interface. It also provides streamlined alignment of tabular data and powerful time series functionality.
  • DataFrame is the key data structure in Pandas. It allows us to store and manipulate tabular data as a 2-D data structure.
  • Pandas provides a rich feature-set on the DataFrame. For example, data alignment, data statistics, slicing, grouping, merging, concatenating data, etc.

安装和开始使用Pandas您需要安装Python 2.7及以上版本才能安装Pandas模块。如果您在使用conda环境,则可以使用以下命令进行安装。

conda install pandas

如果您正在使用PIP,则运行以下命令安装pandas模块。

pip3.7 install pandas
Python Install Pandas Module要在Python脚本中导入Pandas和NumPy,请添加以下代码片段:

import pandas as pd
import numpy as np

由于Pandas依赖于NumPy库,我们需要引入这个依赖。


Pandas模块中的数据结构Pandas模块提供了三种数据结构,分别如下:

  • Series: It is a 1-D size-immutable array like structure having homogeneous data.
  • DataFrames: It is a 2-D size-mutable tabular structure with heterogeneously typed columns.
  • Panel: It is a 3-D, size-mutable array.

熊猫数据框架DataFrame是最重要且广泛使用的数据结构,是一种存储数据的标准方式。DataFrame的数据以行和列对齐,就像SQL表或电子表格数据库一样。我们可以将数据硬编码到DataFrame中,也可以导入CSV文件、tsv文件、Excel文件、SQL表等。我们可以使用下面的构造函数来创建一个DataFrame对象。

pandas.DataFrame(data, index, columns, dtype, copy)

下面是参数的简要描述:

  • data – create a DataFrame object from the input data. It can be list, dict, series, Numpy ndarrays or even, any other DataFrame.
  • index – has the row labels
  • columns – used to create column labels
  • dtype – used to specify the data type of each column, optional parameter
  • copy – used for copying data, if any

有很多方法来创建DataFrame。我们可以从字典或字典列表创建DataFrame对象。我们还可以从元组列表、CSV、Excel文件等创建DataFrame。让我们运行一个简单的代码,从字典列表中创建一个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)
Python pandas Dataframe


将数据从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中的数据运行数据帧使用其名称显示整个表格。在实时中,要分析的数据集将拥有数千行。为了分析数据,我们需要检查来自大量数据集的数据。Pandas提供了许多有用的函数,可以仅检查我们所需的数据。我们可以使用df.head(n)来获取前n行,或df.tail(n)来打印最后n行。例如,下面的代码从数据帧中打印出前2行和最后1行。

print(df.head(2))
Head

print(df.tail(1))
Values


获取记录的统计摘要我们可以使用df.describe()函数对数据进行统计摘要(计数、平均值、标准差、最小值、最大值等)。现在,让我们使用这个函数,来显示“读写能力%”列的统计摘要。为了做到这一点,我们可以添加以下代码片段:

print(df['Literacy %'].describe())
Describe


2.记录排序我们可以使用df.sort_values()函数按任意列对记录进行排序。例如,让我们按照“识字率”一列进行降序排序。

print(df.sort_values('Literacy %', ascending=False))
Sort


切割记录可以使用列名提取特定列的数据。例如,要提取“Capital”列,我们使用:

df['Capital']

或者

(df.Capital)
Slice Capitals

print(df[['State', 'Capital']])
Slicemultiplecol

df[0:3]
Slicerows


4. 数据过滤还可以根据列值进行过滤。例如,下面的代码会过滤掉具有超过90%识字率的列。

print(df[df['Literacy %']>90])
Filter Lit

print(df[df['State'].isin(['Karnataka', 'Tamil Nadu'])])
Filter


5. 更改列名可以使用df.rename()函数来重命名列。该函数以旧的列名和新的列名作为参数。例如,我们将列’Literacy %’重命名为’Literacy percentage’。

df.rename(columns = {'Literacy %':'Literacy percentage'}, inplace=True)
print(df.head())
Rename


数据整理数据科学涉及对数据进行处理,以便能够与数据算法很好地配合。数据整理是处理数据的过程,如合并、分组和连接。Pandas库提供了merge()、groupby()和concat()等有用的函数来支持数据整理任务。让我们创建两个数据框并展示数据整理函数,以更好地理解它。

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)
Wrangling 1

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)
Wrangling 2


合并 (hé现在,让我们使用merge()函数将我们创建的两个DataFrame按照’Employee_id’的值进行合并:

print(pd.merge(df1, df2, on='Employee_id'))
Merging


b. 分组 zǔ)分组是将数据按不同类别进行收集的过程。例如,在以下示例中,“员工名字”字段两次出现了“Meera”这个名称。因此,让我们按照“员工名字”一列对其进行分组。

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'))
Grouping


c. 连接数据连接涉及将一组数据添加到另一组数据中。Pandas提供了一个名为`concat()`的函数来连接DataFrame。例如,我们可以使用`concat()`函数来连接df1和df2两个DataFrame。

print(pd.concat([df1, df2]))
Concatenation


通过传递一个系列字典创建一个数据框架。创建一个Series,我们可以使用pd.Series()方法并将一个数组传递给它。让我们按照以下方式创建一个简单的Series:

series_sample = pd.Series([100, 200, 300, 400])
print(series_sample)
Series Sample

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)
Df Dictseries


列选择、添加、删除可以从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'])
Col Selection

d = {'比赛场次' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']),
 '位置' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])}
df = pd.DataFrame(d)
df['得分率']=pd.Series([80, 70, 60, 50], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])
print(df)
列添加
del df['比赛场次']

或者

df.pop('比赛场次')
删除列

结论

在本教程中,我们对Python的Pandas库进行了简要介绍。我们通过实际示例,展示了Pandas库在数据科学领域中的强大功能。我们还介绍了Python库中的不同数据结构。参考资料:Pandas官方网站。

bannerAds