数据分析入门:Python Pandas教程
数据是我们世界的重要组成部分。事实上,全球90%的数据都是在过去三年内产生的。许多科技巨头已经开始聘请数据科学家来分析数据,以辅助商业决策。数据分析是一种收集数据,然后对数据进行各种操作(例如标准化、转换、清洗等)以提取有用信息的方法。目前,数据分析人才需求旺盛,各种规模的公司都在寻求这些宝贵的技能。
目前,Python 是数据分析领域最重要的语言,许多行业标准工具都是用 Python 编写的。Python Pandas 是最重要、最热门的工具之一,任何有志成为数据分析师的人都必须学习。本文将为您介绍 Pandas 的基础知识。
今天我们将探讨以下内容:
- 介绍 Python 的 Pandas 库
- Pandas 数据类型和结构
Series最重要的操作DataFrame最重要的操作- 如何读取和导入 Pandas 数据
- 使用 Pandas 进行数据整理
- 下一步
开启您的数据分析师职业生涯。
学习如何使用 Python 工具进行预测性数据分析。Python
预测性数据分析
介绍 Python 的 Pandas 库
Pandas库是Python数据科学家和分析师最重要、最流行的工具之一,也是许多数据项目的基石。Pandas是一个用于数据清洗和处理的开源Python包。它提供了扩展的、灵活的数据结构,可以存储不同类型的带标签数据和关系型数据。此外,它的安装和使用也非常简单。
Pandas 经常与其他 Python 库配合使用。事实上,Pandas 是基于 NumPy 包构建的,因此它们之间的很多结构都很相似。Pandas 也被用于 SciPy 进行统计分析,或与 Matplotlib 配合使用进行绘图。Pandas 既可以单独使用,配合文本编辑器,也可以配合 Jupyter Notebook 使用,后者是进行更复杂数据建模的理想环境。Pandas 适用于大多数 Python 版本,包括 Python 3。
您可以将 Pandas 视为数据的“家”,在这里您可以集中完成数据清洗、分析和转换。Pandas 本质上是功能更强大的 Excel 替代品。使用 Pandas,您可以执行以下操作:
- 轻松计算数据统计信息,例如查找列的平均值、分布和中位数。
- 使用 Matplotlib 等数据可视化工具,可以轻松创建柱状图、直方图等。
- 通过按特定条件筛选列或轻松删除值来清理数据。
- 利用合并、连接、重塑等操作灵活地处理您的数据
- 读取、写入和存储您的清洗后的数据,格式可以是数据库、
txt文件或CSV文件。
熊猫的受欢迎程度
正如我们所知,Python 是数据分析领域最流行的编程语言,许多流行的机器学习和可视化库都是用 Python 编写的,包括 Pandas、Numpy、TensorFlow、Matplotlib、Scikit-learn 等等。事实上,在 2020 年 Stack Overflow 最流行编程语言调查中,Python 位列第四,它因其简洁性、易于学习和完善的库支持而备受青睐。
Pandas 是数据分析的重要组成部分。它在最受欢迎和最受青睐的库中排名第四。它也一直位列最受欢迎的编程工具榜单前列,这无疑表明 Pandas 是全球开发者梦寐以求的工具。学习 Pandas 是成为数据分析师的重要一步。
第一步:安装 Pandas
Pandas 的安装非常简单。最简单的方法是打开命令行(PC)或终端程序(Mac),然后使用以下命令导入功能并进行安装pandas。
import pandas as pd
现在可以通过缩写词访问 Pandas
pd。
您也可以使用内置的 Python 工具安装 Pandas pip,并运行以下命令。
$ pip install pandas
Pandas 数据结构和数据类型
数据类型就像一个内部构造,它决定了 Python 如何操作、使用或存储数据。进行数据分析时,使用正确的数据类型至关重要,可以避免错误。Pandas 通常能够正确推断数据类型,但有时我们需要显式地转换数据。接下来,我们将介绍 Pandas 中可用的数据类型,也称为类型dtypes。
object文本或混合的数字或非数字值int64整数bool:真/假值float64浮点数category:有限的文本值列表datetime64日期和时间值timedelta[ns]两个日期时间之间的差异
数据结构是一种特定的数据组织方式。Pandas 有两种数据结构,所有操作都基于这两种对象:
SeriesDataFrame
您可以将此视为便于存储和组织的图表,其中 Series 是列,而 DataFrame 是由一系列 Series 组成的表格。Series它可以被描述为二维数组中的单列,可以存储任何类型的数据。DataFrame它就像一个表格,使用多列和多行来存储数据,类似于电子表格。DataFrame对象中的每个值都与行索引和列索引相关联。
Series最重要的操作
我们可以通过创建一个 Series 来开始使用 Pandas。创建 Series 的方法是调用 `createSeries`pd.Series()方法并传入一个值列表。
我们使用 `printSeries` 语句打印该 Series。Pandasprint默认从索引 0 开始计数。然后,我们需要显式地定义这些值。
series1 = pd.Series([1,2,3,4])
print(series1)
我们来看一个更复杂的例子。运行下面的代码。
#importing pandas in our program
import pandas as pd
# Defining a series object
srs = pd.Series([11.9, 36.0, 16.6, 21.8, 34.2], index = ['China', 'India', 'USA', 'Brazil', 'Pakistan'])
# Set Series name
srs.name = "Growth Rate"
# Set index name
srs.index.name = "Country"
# printing series values
print("The Indexed Series values are:")
print(srs)
输出:
索引序列值如下:
国家/地区
中国 11.9
印度 36.0
美国 16.6
巴西 21.8
巴基斯坦 34.2
名称:增长率,数据类型:float64
这是怎么回事?Series第 8 行和第 11 行使用了对象的两个属性。第一个属性srs.name设置了序列对象的名称。第二个属性srs.index.name则设置了索引的名称。很简单,对吧?
从以下位置选择条目Series
要从数据库中选择条目Series,我们根据索引名称或索引号选择元素。这使用了 NumPy。
import numpy as np
import pandas as pd
srs = pd.Series(np.arange(0, 6, 1), index = ['ind0', 'ind1', 'ind2', 'ind3', 'ind4', 'ind5'])
srs.index.name = "Index"
print("The original Series:\n", srs)
print("\nSeries element at index ind3:")
print(srs['ind3']) # Fetch element at index named ind3
print("\nSeries element at index 3:")
print(srs[3]) # Fetch element at index 3
print("\nSeries elements at multiple indexes:\n")
print(srs[['ind1', 'ind4']]) # Fetch elements at multiple indexes
输出:(
'原始序列:\n', 索引
ind0 0
ind1 1
ind2 2
ind3 3
ind4 4
ind5 5
dtype: int64)
这是如何实现的呢?嗯,元素Series是通过三种方式选择的。
- 第 9 行,根据索引名称选择元素。
- 第 12 行,元素是根据索引号选择的。请记住,索引号从 0 开始
0。 Series在第 15 行,通过选择内部的多个索引名称来选择多个元素[]。
从 A 中删除条目Series
在 Pandas 中,删除不需要的索引是一个常用功能。如果drop(index_name)对对象调用此函数并传入给定的索引Series,则会删除该索引名称。
import numpy as np
import pandas as pd
srs = pd.Series(np.arange(0, 6, 1), index = ['ind0', 'ind1', 'ind2', 'ind3', 'ind4', 'ind5'])
srs.index.name = "Index"
print("The original Series:\n", srs)
srs = srs.drop('ind2') # drop index named ind2
print("The New Series:\n", srs)
此处输出显示ind2索引已被删除。此外,只能通过指定索引名称来删除索引,而不能指定索引编号。因此,srs.drop(srs[2])这样做行不通。
很简单,对吧?我们还可以对对象应用许多其他函数、条件和逻辑运算符,series从而更有效地利用索引。其中一些函数包括:
- 该条件
srs[srs == 1.0]将返回一个序列对象,其中包含值为 1.0 的索引。 name : str, optional为该系列命名copy : bool, default False允许我们复制输入的数据- 该
notnull()函数将返回一个序列对象,其中索引已分配给False(用于NaN值),其余索引已分配。True - 以及更多
注意:在 Pandas 中,
NaN`null` 指的是空值。这通常表示尚未确定或定义的值。我们可以NaN通过在数据中为这些值赋值来处理它们。
DataFrame最重要的操作
在 Pandas 中,有几种方法可以创建数组DataFrame。从头开始创建数组的最简单方法是创建并打印数组df。
import pandas as pd
df = pd.DataFrame({
"Column1": [1, 4, 8, 7, 9],
"Column2": ['a', 'column', 'with', 'a', 'string'],
"Column3": [1.23, 23.5, 45.6, 32.1234, 89.453],
"Column4": [True, False, True, False, True]
})
print(df)
输出:
列1 列2 列3 列
4 0 1 a 1.2300 True
1 4 列 23.5000 False
2 8 with 45.6000 True
3 7 a 32.1234 False
4 9 字符串 89.4530 True
我们还可以创建一个 DataFrame dict,并将字典数据传递给 DataFrame 构造函数。假设我们有一些蔬菜销售数据,并希望按蔬菜种类和数量进行整理。我们的数据如下所示:
data = {
'peppers': [3, 2, 0, 1],
'carrots': [0, 3, 7, 2]
}
现在我们使用一个简单的命令将其传递给构造函数。
quantity = pd.DataFrame(data)
quantity
这是怎么实现的呢?
其实,我们数据中的每个项目或值data都会对应我们创建的 DataFrame 中的一列,就像图表一样。这个 DataFrame 的索引默认是数字,但我们可以根据需要进一步指定。比如说,我们想知道每个月的数量,那么这就是我们的新索引。我们可以使用以下命令来实现。
quantity = pd.DataFrame(data, index=['June', 'July', 'August', 'September'])
quantity
获取有关您数据的信息
加载数据后运行的第一个命令是.info(),它提供了有关数据集的所有基本信息。
import pandas as pd
df = pd.DataFrame({
"Column1": [1, 4, 8, 7, 9],
"Column2": ['a', 'column', 'with', 'a', 'string'],
"Column3": [1.23, 23.5, 45.6, 32.1234, 89.453],
"Column4": [True, False, True, False, True]
})
df.info()
输出:
范围索引:5 个条目,0 到 4
数据列(共 4 列):
列 1 5 个非空 int64
列 2 5 个非空 object
列 3 5 个非空 float64
列 4 5 个非空 bool
数据类型:bool(1)、float64(1)、int64(1)、object(1)
内存使用量:197.0+ 字节
由此,您可以使用其他操作访问更多信息,例如 ` .shaperows()`,它会输出一个 (rows, columns) 元组。这对于了解数据的大小非常有用,尤其是在数据清理之后。这样,我们就能知道哪些数据被删除了。
我们还可以打印数据集的列名,以便查找拼写错误或格式不一致之处。我们使用运算.columns符来实现这一点。之后,您可以轻松地重命名列。此外,该.rename()方法允许我们重命名列,类似于 Word 文档中的查找和替换功能。
在我们的数据框中进行搜索和选择
我们还需要知道如何操作或访问数据框中的数据,例如选择、搜索或删除数据值。您可以按列或按行进行操作。让我们看看具体该怎么做。选择数据列的最简单方法是使用方括号[ ]。我们也可以使用方括号选择多列。例如,假设我们只想查看六月份的蔬菜数量。
quantity.loc['June']
注意:
loc和iloc用于定位数据。
.iloc通过数值索引定位.loc通过索引名称进行定位。这类似于listPython 中的切片操作。
PandasDataFrame对象还提供了选择特定列的方法。以下示例展示了如何实现这一点。
import pandas as pd
df = pd.read_csv('cancer_stats.csv')
print(df.columns) # print columns of DataFrame
print("\nThe First Column")
print(df['Sex'].head()) # Fetch the sex colum from DataFrame
print("\nThe type of this column is: " + str(type(df['Sex'])) + "\n")
print("\nThe Second Column")
print(df['Under 1'].head()) # Fetch the Under 1 colum from DataFrame
print("\nThe type of this column is: " + str(type(df['Under 1'])) + "\n")
print("\nThe Last Column")
print(df['40-44'].head()) # Fetch the 40-44 colum from DataFrame
print("\nThe type of this column is: " + str(type(df['40-44'])) + "\n")
输出:
Index([u'性别', u'1岁以下', u'1-4岁', u'5-9岁', u'10-14岁', u'15-19岁', u'20-24岁'
, u'25-29岁', u'30-34岁', u'35-39岁', u'40-44岁'],
dtype='object')
第一列:
0名男性,
1名女性
,2名男性
,3名女性
第 5 行的df.columns函数显示了所有列的名称。我们通过列名访问列。第 8、12 和 17 行分别df['column_name']用于获取第 1 列、第 2 列和最后一列。
继续学习。
无需费力浏览视频或文档,即可轻松学习 Pandas 和数据分析。Educative 的文字课程易于浏览,并提供实时编码环境,让学习快速高效。
从现有列创建一个新的 DataFrame
我们还可以获取多列数据并DataFrame从中创建一个新对象。
import pandas as pd
df = pd.read_csv('test.csv')
print(df.columns)
print("\nThe original DataFrame:")
print(df.head())
print("\nThe new DataFrame with selected columns is:\n")
new_df = pd.DataFrame(df, columns=['Sex', 'Under 1', '40-44'])
print(new_df.head())
对 DataFrame 中的数据进行重新索引
我们还可以通过索引本身或列来重新索引数据。重新索引reindex()允许我们在不破坏对象初始设置的情况下进行更改。
注意:
Series对于对象,重新索引的规则是相同的DataFrame。
#importing pandas in our program
import pandas as pd
# Defining a series object
srs1 = pd.Series([11.9, 36.0, 16.6, 21.8, 34.2], index = ['China', 'India', 'USA', 'Brazil', 'Pakistan'])
# Set Series name
srs1.name = "Growth Rate"
# Set index name
srs1.index.name = "Country"
srs2 = srs1.reindex(['China', 'India', 'Malaysia', 'USA', 'Brazil', 'Pakistan', 'England'])
print("The series with new indexes is:\n",srs2)
srs3 = srs1.reindex(['China', 'India', 'Malaysia', 'USA', 'Brazil', 'Pakistan', 'England'], fill_value=0)
print("\nThe series with new indexes is:\n",srs3)
输出:(
'新指数序列如下:\n', Country
China 11.9
India 36.0
Malaysia NaN
USA 16.6
Brazil 21.8
Pakistan 34.2
England NaN
Name: Growth Rate, dtype: float64)
('\n新指数序列如下:\n', Country
China 11.9
India 36.0
Malaysia 0.0
USA 16.6
Brazil 21.8
Pakistan 34.2
England 0.0
Name: Growth Rate, dtype: float64)
这是怎么实现的呢?在第 11 行,索引被更改了。新的索引名称被添加到 `<index>`Row2和 `<index> ` 之间Row4。在第 14 行,columns应该使用关键字 `reindex` 来专门重新索引 DataFrame 的列。规则与索引相同。NaN默认情况下,`<index>` 的值被分配给了整列。
如何读取或导入 Pandas 数据
使用 Pandas 库读取或导入其他文件中的数据非常容易。实际上,我们可以使用多种数据源,例如CSV`database` JSON、`database.txt` 或 ` Exceldatabase.txt` 来加载和访问数据。让我们逐一了解一下。
CSV从文件中读取和导入数据
我们可以从文件中导入数据,这是 Pandas 用户的常用做法。我们只需创建或打开 CSV 文件,复制数据,将其粘贴到记事本中,然后保存到存放 Python 脚本的同一目录下。之后,您可以使用Pandas 内置的函数,CSV通过一段代码读取数据。read_csv
import pandas as pd
data = pd.read_csv('vegetables.csv')
print(data)
read_csv默认情况下,索引列会生成在第一个元素中,因此我们需要更改此设置,使第一个元素成为索引列。我们可以通过传递参数index_col来告诉 Pandas 要索引的列。
data = pd.read_csv("data.csv", index_col=0)
使用 Pandas 对数据进行排序和清理后,我们可以通过简单的命令将其保存回原始文件。您只需输入文件名和扩展名即可。是不是很简单!
df.to_csv('new_vegetables.csv')
从 JSON 读取和导入数据
假设你有一个JSON文件。JSON 文件本质上就像一个存储的 Python 代码dict,因此 Pandas 可以使用相应的函数轻松访问和读取它read_json。我们来看一个例子。
df = pd.read_json('purchases.json')
就像处理CSV文件一样,使用 Pandas 对数据进行排序和清理后,我们可以使用简单的命令将其保存回原始文件。您只需输入文件名和扩展名即可。
df.to_json('new_purchases.json')
从 Excel 文件读取和导入数据
假设你有一个Excel文件。你可以类似地使用该read_excel函数来访问和读取其中的数据。
import pandas as pd
data = pd.read_excel('workers.xlsx')
print (data)
调用该read_excel函数后,我们将 Excel 文件名作为参数传递,这样read_excel它就会打开文件并显示数据。我们可以使用该函数print()来显示数据。如果想更进一步,我们可以添加loc()之前提到的方法,从而读取文件的特定行和列。
import pandas as pd
data = pd.read_excel('workers.xlsx')
print (data.loc[[1,4,7],['Name','Salary']])
使用 Pandas 进行数据整理
有了数据之后,我们就可以使用数据整理流程来处理和准备数据,以便进行分析。最常见的数据整理流程包括合并、连接和分组。让我们来了解一下这些流程的基本原理。
与 Pandas 合并
当我们想要合并共享一个键变量但位于不同 DataFrame 中的数据时,就需要用到合并。要合并 DataFrame,我们使用 `merge`merge()函数。假设我们有 `A`df1和 `B` df2。
import pandas as pd
d = {
'subject_id': ['1', '2', '3', '4', '5'],
'student_name': ['Mark', 'Khalid', 'Deborah', 'Trevon', 'Raven']
}
df1 = pd.DataFrame(d, columns=['subject_id', 'student_name'])
print(df1)
import pandas as pd
data = {
'subject_id': ['4', '5', '6', '7', '8'],
'student_name': ['Eric', 'Imani', 'Cece', 'Darius', 'Andre']
}
df2 = pd.DataFrame(data, columns=['subject_id', 'student_name'])
print(df2)
那么,我们该如何合并它们呢?很简单:使用merge()函数!
pd.merge(df1, df2, on='subject_id')
使用 Pandas 进行分组
分组是我们对数据进行分类的方式。如果一个值出现在同一列的多行中,那么其他列中与该值相关的数据就可以分组在一起。就像合并一样,它比听起来要简单得多。我们使用groupby函数来实现。请看这个例子。
# import pandas library
import pandas as pd
raw = {
'Name': ['Darell', 'Darell', 'Lilith', 'Lilith', 'Tran', 'Tran', 'Tran',
'Tran', 'John', 'Darell', 'Darell', 'Darell'],
'Position': [2, 1, 1, 4, 2, 4, 3, 1, 3, 2, 4, 3],
'Year': [2009, 2010, 2009, 2010, 2010, 2010, 2011, 2012, 2011, 2013, 2013, 2012],
'Marks':[408, 398, 422, 376, 401, 380, 396, 388, 356, 402, 368, 378]
}
df = pd.DataFrame(raw)
group = df.groupby('Year')
print(group.get_group(2011))
输出:
分数 姓名 名次 年份
6 396 Tran 3 2011
8 356 John 3 2011
级联
连接(Concatenation)是一个比较长的词,意思是将一组数据添加到另一组数据中。我们使用concat()函数来实现这一点。为了阐明合并(Merge)和连接(Concatenation)的区别,merge()合并是基于共享列合并数据,而concat()连接则是跨列或跨行合并数据框(DataFrame)。
print(pd.concat([df1, df2]))
很简单,对吧?其他一些常见的数据整理流程你也应该了解:
- 映射数据并查找重复项
- 查找数据中的异常值
- 数据聚合
- 重塑数据
- 替换和重命名
- 以及更多
总结及后续步骤
现在你已经对 Python Pandas 及其众多优势有了相当的了解,接下来学习什么就至关重要了。掌握了导入、读取和处理数据等基础知识后,就可以开始学习 Python 数据分析的下一个阶段了:
- 统计数据
- NumpPy
- 高级数据整理
- 数据可视化
- 数据抓取
- 实际项目
Educative 的Python 预测数据分析课程涵盖了所有这些概念以及更多内容,并提供实践练习和行业标准示例。您可以通过测验、交互式示例和真实行为分析来掌握 Pandas。课程结束时,您将成为一名自信的数据分析师!



