数据科学必备技能:掌握Pandas序列和数据框

数据科学必备技能:掌握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
    
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-北天-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值