数据科学必备技能:掌握Pandas序列和数据框
文章目录
一、Pandas简介
Pandas是一个开源的Python库,主要用于数据分析和数据处理任务。它提供了高效的数据结构和数据操作功能,使得数据处理变得更加容易和直观。
Pandas中最常用的两种数据结构是Series和DataFrame。Series是一维数组,每个元素都有一个索引,可以用于表示一列数据。DataFrame是一个二维表格,由多个行和列组成,每个列都可以是不同的数据类型,可以看做是由多个Series组成的。
Pandas具有强大的数据操作功能,包括数据清洗、数据过滤、数据排序、数据合并等,使得数据分析工作更加高效。它还支持多种数据输入输出格式,如CSV、Excel、SQL数据库、JSON、HTML等。
除此之外,Pandas还提供了一些统计分析和可视化工具,如数据分组、透视表、聚合函数、直方图、散点图等,帮助用户更好地理解和探索数据。
Pandas的优势在于它简化了数据分析过程中的许多繁琐的操作,使得用户可以更加专注于数据本身的分析和探索。因此,Pandas已成为数据分析师、数据科学家和数据工程师们必备的工具之一。
二、序列
Pandas中的序列(Series)是一种一维的数据结构,类似于一个数组或者列表,但与之不同的是,序列可以存储不同类型的数据,并且可以给数据赋予标签(索引),使得数据更易于访问和处理。序列可以被认为是Pandas中最基本的数据结构,也是大多数Pandas操作的基础。
序列具有许多属性和方法,例如序列的索引、长度、数据类型、值计数等等。此外,序列还具有一些重要的方法,例如切片、过滤、聚合等,可以用于对序列进行操作和处理。
1、序列创建及访问
在Pandas中,序列可以通过传递一个列表、数组或字典来创建。其中,传递一个列表或数组将创建一个由默认整数索引标记的序列,而传递一个字典将创建一个由字典键标记的序列。例如:
import pandas as pd
import numpy as np
# 从列表创建序列
s1 = pd.Series([1, 2, 3, 4, 5])
print(s1)
# 从数组创建序列
s2 = pd.Series(np.array([1, 2, 3, 4, 5]))
print(s2)
# 从字典创建序列
s3 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(s3)
0 1
1 2
2 3
3 4
4 5
dtype: int64
0 1
1 2
2 3
3 4
4 5
dtype: int64
a 1
b 2
c 3
dtype: int64
可以看到,通过列表和数组创建的序列由默认整数索引标记,而通过字典创建的序列则由字典键标记。
可以通过下标或索引访问序列中的元素,例如:
print(s[0])
print(s[2])
print(s.iloc[3])
1
3
4
2、序列属性
序列有许多属性可以用于获取序列的基本信息,例如:
print(s.shape) # 返回序列的维度
print(s.size) # 返回序列的元素个数
print(s.dtype) # 返回序列的数据类型
print(s.index) # 返回序列的索引
print(s.values) # 序列的值
(5,)
5
int64
RangeIndex(start=0, stop=5, step=1)
[1 2 3 4 5]
3、序列方法
序列有许多方法可以用于处理和操作序列的数据,例如:
-
unique()
该方法返回序列中的唯一值。例如:
import pandas as pd s = pd.Series(['apple', 'banana', 'orange', 'apple']) print(s.unique())
['apple' 'banana' 'orange']
-
isin()
该方法用于判断序列中的元素是否包含在另一个序列中。例如:
import pandas as pd s1 = pd.Series(['apple', 'banana', 'orange', 'apple']) s2 = pd.Series(['banana', 'orange']) print(s1.isin(s2))
0 False 1 True 2 True 3 False dtype: bool
-
value_counts()
该方法返回序列中每个元素出现的次数。例如:
import pandas as pd s = pd.Series(['apple', 'banana', 'orange', 'apple']) print(s.value_counts())
apple 2 banana 1 orange 1 dtype: int64
-
空值处理方法
Pandas中的序列有许多方法可以处理空值。例如:
import pandas as pd import numpy as np s = pd.Series([1, np.nan, 3, np.nan, 5]) # 用0填充空值 print(s.fillna(0)) # 删除空值 print(s.dropna()) # 判断序列中是否有空值 print(s.isnull())
0 1.0 1 0.0 2 3.0 3 0.0 4 5.0 dtype: float64 0 1.0 2 3.0 4 5.0 dtype: float64 0 False 1 True 2 False 3 True 4 False dtype: bool
4、序列切片
序列可以通过切片来获取子序列,例如:
s3 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s3['b':'d']) # 获取索引为'b'到'd'的子序列
print(s3[['a', 'c', 'e']]) # 获取索引为'a'、'c'、'e'的元素
b 2
c 3
d 4
dtype: int64
a 1
c 3
e 5
dtype: int64
5、序列聚合运算
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5])
print(s.sum()) #求和
print(s.mean()) #求平均
print(s.std()) #求标准差
print(s.max()) #求最大值
print(s.min()) #求最小值
15
3.0
1.5811388300841898
5
1
三、数据框
Pandas中的数据框(DataFrame)是一种二维的数据结构,类似于电子表格或SQL中的表格。数据框由多个行和列组成,每列可以包含不同的数据类型(例如整数、浮点数、字符串等)。数据框可以看作是由多个序列组成的一个表格,每个序列对应数据框中的一列,而每行对应于所有序列中相同位置的元素。
数据框可以被认为是Pandas中最重要的数据结构之一,它是数据处理和分析的基础。数据框具有许多重要的方法和属性,例如对列进行选择、添加、删除、修改、合并等等。此外,数据框还支持许多高级的数据操作和分析,例如分组、聚合、排序、过滤等等。
1、数据框创建
在Pandas中,数据框可以通过传递一个字典或二维数组来创建。如果传递一个字典,则字典的键将成为数据框的列名,而字典的值将成为数据框中的列数据。如果传递一个二维数组,则可以通过传递列名和行索引列表来指定列名和行索引。例如:
import pandas as pd
import numpy as np
# 从字典创建数据框
df1 = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
print(df1)
# 从二维数组创建数据框
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]), columns=['a', 'b', 'c'], index=['x', 'y'])
print(df2)
a b
0 1 4
1 2 5
2 3 6
a b c
x 1 2 3
y 4 5 6
可以看到,通过字典创建的数据框中,字典的键成为数据框的列名,而字典的值成为数据框中的列数据;通过二维数组创建的数据框中,列名和行索引可以通过columns和index参数指定。
2、数据框属性
数据框具有很多重要的属性,可以用于查询、操作和分析数据。
以下是一些常见的数据框属性:
-
shape
:返回一个元组,其中包含数据框的行数和列数。import pandas as pd data = {'name': ['Alice', 'Bob', 'Charlie', 'David'], 'age': [25, 30, 35, 40], 'gender': ['F', 'M', 'M', 'M']} df = pd.DataFrame(data) print(df.shape) # (4, 3)
-
columns
:返回一个列表,其中包含数据框的列名。print(df.columns) # Index(['name', 'age', 'gender'], dtype='object')
-
index
:返回一个列表,其中包含数据框的行索引。print(df.index) # RangeIndex(start=0, stop=4, step=1)
-
dtypes
:返回一个Series,其中包含每列的数据类型。print(df.dtypes) # name object # age int64 # gender object # dtype: object
-
describe(
):返回一个汇总统计信息的数据框,包括每列的计数、均值、标准差、最小值、25%分位数、中位数、75%分位数和最大值。print(df.describe()) # age # count 4.000000 # mean 32.500000 # std 6.454972 # min 25.000000 # 25% 28.750000 # 50% 32.500000 # 75% 36.250000 # max 40.000000
-
isna()
:返回一个布尔型数据框,其中的元素指示该位置上是否为缺失值。df_nan = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6], 'C': [7, 8, 9]}) print(df_nan.isna()) # A B C # 0 False False False # 1 False True False # 2 True False False
数据框的属性提供了一些有用的信息和元数据,可以帮助我们更好地了解数据。它们可以用于筛选、操作和分析数据,是数据处理和分析的基础。
3、数据框方法
数据框作为数据挖掘分析的重要数据结构,提供了非常丰富的方法用于数据处理及计算。下面介绍其常用的方法,包括去掉空值(nan 值)、对空值进行填充、按值进行排序、按索引进行排序、取前n行数据、删除列、数据框之间的水平连接、数据框转化为NumPy数组、数据导出到Excel文件、相关统计分析等。
-
dropna()
:删除数据框中包含缺失值(NaN)的行或列。import pandas as pd import numpy as np df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6], 'C': [7, 8, 9]}) print(df.dropna()) # 删除包含NaN的行,默认axis=0 # A B C # 0 1.0 4.0 7 # 2 NaN 6.0 9 print(df.dropna(axis=1)) # 删除包含NaN的列 # C # 0 7 # 1 8 # 2 9
-
fillna()
:用指定的值或方法(如前向填充、后向填充、插值等)填充数据框中的缺失值。print(df.fillna(0)) # 用0填充NaN # A B C # 0 1.0 4.0 7 # 1 2.0 0.0 8 # 2 0.0 6.0 9 print(df.fillna(method='ffill')) # 前向填充 # A B C # 0 1.0 4.0 7 # 1 2.0 4.0 8 # 2 2.0 6.0 9 print(df.fillna(df.mean())) # 用列均值填充NaN # A B C # 0 1.0 4.0 7 # 1 2.0 5.0 8 # 2 1.5 6.0 9
-
sort_values()
:按指定的列对数据框进行排序。df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}) print(df.sort_values('age')) # 按年龄排序 # name age # 0 Alice 25 # 1 Bob 30 # 2 Charlie 35
-
sort_index()
:按行索引或列索引对数据框进行排序。print(df.sort_index(ascending=False)) # 按行索引降序排序 # name age # 2 Charlie 35 # 1 Bob 30 # 0 Alice 25
-
head()
:返回数据框的前几行。print(df.head(2)) # 返回前2行 # name age # 0 Alice 25 # 1 Bob 30
-
drop()
:删除指定的行或列。print(df.drop(1)) # 删除第2行 # name age # 0 Alice 25 # 2 Charlie 35 print(df.drop('age', axis=1)) # 删除'age'列 # name # 0 Alice # 1 Bob # 2 Charlie
-
join()
:按照指定的列或行进行合并。df1 = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}) df2 = pd.DataFrame({'name': ['Charlie', 'Bob', 'David'], 'score': [80, 90, 70]}) print(df1.join(df2.set_index('name'), on='name')) # 按name列进行合并 # name age score # 0 Alice 25 NaN # 1 Bob 30 90.0 # 2 Charlie 35 80.0 print(df1.join(df2.set_index('name'), on='name', how='outer')) # 按name列进行外连接 # name age score # 0 Alice 25.0 NaN # 1 Bob 30.0 90.0 # 2 Charlie 35.0 80.0 # 3 David NaN 70.0
-
as_matrix()
:将数据框转化为NumPy数组。df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}) print(df.as_matrix()) # [['Alice' 25] # ['Bob' 30] # ['Charlie' 35]]
-
to_excel()
:将数据框保存为Excel文件。df.to_excel('example.xlsx', index=False)
-
统计方法
:对数据框进行统计计算,如求和、平均值、标准差、最大值、最小值等。df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) print(df.sum()) # 求和 # A 6 # B 15 # C 24 # dtype: int64 print(df.mean()) # 求平均值 # A 2.0 # B 5.0 # C 8.0 # dtype: float64 print(df.std()) # 求标准差 # A 1.0 # B 1.0 # C 1.0 # dtype: float64 print(df.max()) # 求最大值 # A 3 # B 6 # C 9 # dtype: int64 print(df.min()) # 求最小值 # A 1 # B 4 # C 7 # dtype: int64
4、数据框切片
Pandas中的数据框切片主要分为两种,一种是使用iloc属性
进行切片,另一种是使用loc属性
进行切片。
-
iloc切片
:通过行列的位置来进行切片。df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'score': [80, 90, 70]}) print(df.iloc[0:2, 0:2]) # 选取第1-2行和第1-2列 # name age # 0 Alice 25 # 1 Bob 30 print(df.iloc[:, 1:]) # 选取所有行的第2列及以后的列 # age score # 0 25 80 # 1 30 90 # 2 35 70
-
loc切片
:通过行列的标签名来进行切片。df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'score': [80, 90, 70]}) print(df.loc[0:1, ['name', 'age']]) # 选取第1-2行和name、age列 # name age # 0 Alice 25 # 1 Bob 30 print(df.loc[:, 'age':]) # 选取所有行的age列及以后的列 # age score # 0 25 80 # 1 30 90 # 2 35 70