首页 > 编程笔记 > Python笔记 阅读:1

Python Pandas库的常见用法(非常详细,附带实例)

Pandas 是 Python 的一个数据处理库,具有强大的数据处理和清洗功能,非常适合进行数据分析。

Pandas 要支持两种数据结构:Series 和 DataFrame。

导入Pandas

Python 自身并不包含 Pandas,它是一个需要独立安装的第三方库。如果用户使用的是一个新的 Python 环境,则可能还没有安装 Pandas。

如果用户使用 pip 管理 Python 包,则可以通过在终端输入如下指令安装 Pandas。:

pip install pandas


如果用户使用 conda 作为 Python 环境和包管理器,则用户可以在终端输入如下指令安装 Pandas:

conda install pandas


在使用 Pandas 前,需要先进行导入:
import pandas as pd
在这里,使用 pd 作为 Pandas 的别名,这是约定俗成的做法。

Pandas Series

Series 是 Pandas 的一种数据结构,是类似于数组的一维对象。用户可以用 Python 的列表创建一个 Series:
import pandas as pd
s = pd.Series([1,2,3,4,5])
print(s)
上述代码的执行结果为:

0    1
1    2
2    3
3    4
4    5
dtype: int64

在 Series 中,左边是索引,右边是值。Pandas 会自动为用户创建整数索引。

Pandas DataFrame

DataFrame 是 Pandas 中最常用的数据结构,是二维的、表格型的数据结构。

下面用 Python 的字典创建一个 DataFrame:
import pandas as pd
data = {
    'name': ['John','Anna','Peter','Linda'],
    'age': [28,24,35,32],
    'city': ['New York','Paris','Berlin','London']
}
df = pd.DataFrame(data)
print(df)
DataFrame的数据结构为:
    name  age      city
0   John   28  New York
1   Anna   24     Paris
2  Peter   35    Berlin
3  Linda   32    London
在上面的 DataFrame 中,每一行表示一个观察值(或是一个样本),每一列表示一个变量。DataFrame 既有行索引也有列索引,用户可以用这些索引选择感兴趣的数据。

Pandas的数据操作

Pandas 的数据提供了许多强大的数据操作,下面介绍一些常用的操作。

1) 数据选择

在 Pandas 中,用户可以使用多种方式选择数据。例如,用户可以使用列名选择一个或多个列:
print(df['name'])  # 选择 name 列
print(df[['name','age']])  # 选择 name 和 age 列
print(df[['name','age']]) 这行代码选择 name 和 age 列,并将其打印出来。用户可以通过传入一个包含列名的列表,在 DataFrame 中选择多个列,这将返回一个新的 DataFrame,该 DataFrame 包含原 DataFrame 中的选定列。因此,df[['name','age']] 将返回一个新 DataFrame,新的 DataFrame 仅包含 name 和 age 两列的数据。

当用户选择单列时可使用单括号,如 df['name']; 选择多列时使用双括号,如 df[['name','age']]。这是因为在选择多列时,实际上是向 DataFrame 传递了一个列表,而列表需要用括号进行定义。

用户可以使用 loc 和 iloc 进行更复杂的数据选择:
print(df.loc[0])  # 选择第一行
print(df.loc[0,'name'])  # 选择第一行的 name 列
print(df.iloc[0,0])  # 使用整数索引选择第一行的第一列

在上面的代码中,需要掌握如下知识:

2) 数据过滤

用户可以使用布尔表达式过滤数据:
print(df[df['age'] > 30])  # 选择年龄大于 30 的所有行
在上面的代码中,需要掌握如下知识:

3) 数据排序

用户可以使用 sort_values() 函数对数据进行排序:
print(df.sort_values('age'))  # 按照 age 列进行排序

4) 数据统计

Pandas 提供了许多统计函数,如 mean()、median()、min()、max()。下面计算 age 列的平均值和最大值:
print(df['age'].mean())  # 计算 age 列的平均值
print(df['age'].max())  # 计算 age 列的最大值

5) 数据处理

Pandas 提供了许多数据处理的函数。例如,可以使用 apply() 函数对数据进行处理:
def age_category(age):
    if age < 30:
        return 'Young'
    else:
        return 'Old'

df['age_category'] = df['age'].apply(age_category)
print(df)
上述代码会添加一个 age_category 列,该列的值由 age 列的值通过 age_category() 函数计算得到。

df['age_category']=df['age'].apply (age_category) 这行代码对 age 列应用 age_category() 函数。Apply() 函数接受一个函数,并将这个函数应用到 DataFrame 或 Series 的每一个元素上。在这种情况下,apply() 函数先对 age 列的每一个元素应用 age_category() 函数,然后将结果赋值给新的列 age_category。因此,新的列 age_category 包含每个人的年龄类别。

Pandas数据合并

Pandas 提供 merge() 和 concat() 这两种数据合并的方法。

1) merge()方法

Merge() 方法用于合并两个 DataFrame。假设有两个 DataFrame,一个包含员工的基本信息,另一个包含员工的薪水信息,那么可以使用 merge() 方法合并这两个 DataFrame:
df1 = pd.DataFrame({'employee': ['Bob','Jake','Lisa'],
                    'group': ['Accounting','Engineering','Engineering']})
df2 = pd.DataFrame({'employee': ['Lisa','Bob','Jake'],
                    'salary': [70000,80000,120000]})
df3 = pd.merge(df1,df2)
print(df3)
上述代码的执行结果为:
   employee        group   salary
0       Bob   Accounting    80000
1      Jake  Engineering   120000
2      Lisa  Engineering    70000
df3=pd.merge(df1, df2) 这行代码使用 merge() 方法,将 df1 和 df2 合并到一起。

在默认情况下,merge() 方法将在两个 DataFrame 中找到公共的列,在上面的案例中是 employee 列,并基于这个公共列的值,将 df1 和 df2 的行合并到一起,这种合并方式被称为内连接(Inner Join),这种合并方式只保留在两个 DataFrame 中共有键的那一行。

2) concat()方法

concat() 方法用于将多个 DataFrame 沿着垂直方向或水平方向进行连接:
df1 = pd.DataFrame({'A': ['A0','A1','A2','A3'],
                   'B': ['B0','B1','B2','B3']})
df2 = pd.DataFrame({'A': ['A4','A5','A6','A7'],
                   'B': ['B4','B5','B6','B7']})
df3 = pd.concat([df1,df2])
print(df3)
上述代码的执行结果为:
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
3  A3  B3
4  A4  B4
5  A5  B5
6  A6  B6
7  A7  B7
df3=pd.concat([df1, df2]) 这行代码使用 Pandas 的 concat() 方法,将 df1 和 df2 按照行(纵向)进行拼接。concat() 方法接受一个 DataFrame 作为输入,并将这些 DataFrame 在同一个方向上拼接到一起。

默认情况下,concat() 方法按照行(axis=0)进行拼接,如果用户希望按照列进行拼接,则可以通过设置参数 axis=1 实现。

Pandas数据重塑

Pandas 提供了 pivot() 和 melt() 方法进行数据重塑。

1) pivot()方法

pivot() 方法用于将长格式的数据转换为宽格式的数据,例如:
df = pd.DataFrame({'date': ['2015-01-01','2015-01-01','2015-01-02','2015-01-02'],
                   'variable': ['A','B','A','B'],
                   'value': [1,2,3,4]})
df_pivot = df.pivot(index='date',columns='variable',values='value')
print(df_pivot)
上述代码的执行结果为:
variable  A  B
date           
2015-01-01  1  2
2015-01-02  3  4
df_pivot=df.pivot(index='date', columns='variable', values='value') 这行代码使用 Pandas 的 pivot() 方法,将长格式的 DataFrame 转化为宽格式。pivot() 方法接受三个参数:index、columns 和 values。在这种情况下,date 列设置为索引,variable 列的值转化为新的列,value 列的值填充到相应位置。

2) melt()方法

melt() 方法用于将宽格式的数据转换为长格式的数据,例如:
df = pd.DataFrame({'A': {0: 'a',1: 'b',2: 'c'},
                   'B': {0: 1,1: 3,2: 5},
                   'C': {0: 2,1: 4,2: 6}})
df_melt = df.melt(id_vars=['A'],value_vars=['B','C'])
print(df_melt)
上述代码的执行结果为:
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
3  a        C      2
4  b        C      4
5  c        C      6
df_melt=df.melt(id_vars=['A'], value_vars=['B','C']) 这行代码使用 Pandas 的 melt() 方法,将宽格式的 DataFrame 转化为长格式。

melt() 方法接受 id_vars 和 value_vars 这两个主要参数:
在上面的例子中,A 列的值保持不变,B 列和 C 列的值被转化为长格式。melt() 方法将创建一个新的 DataFrame,原始数据中被指定为 value_vars 的列中,每个值都将出现在新 DataFrame 的单独一行中,列会被转化为新的列 variable,值会被转化为新的列 value。

Pandas字符串处理

Pandas 提供了 str() 方法,便于进行字符串处理。例如,用户可以使用 str.lower() 方法,将字符串转换为小写:
df = pd.DataFrame({'A': ['aBc','IJK','XYZ'],
                   'B': ['abc','ijk','xyz']})
df['A'] = df['A'].str.lower()
print(df)
上述代码的执行结果为:
     A    B
0  abc  abc
1  ijk  ijk
2  xyz  xyz

Pandas时间序列处理

Pandas 提供了丰富的时间序列处理方法。例如,用户可以使用 to_datetime() 方法,将字符串转换为日期:
df = pd.DataFrame({'date': ['2015-01-01','2015-01-02','2015-01-03']})
df['date'] = pd.to_datetime(df['date'])
print(df)
上述代码的执行结果为:
        date
0 2015-01-01
1 2015-01-02
2 2015-01-03
df['date']=pd.to_datetime(df['date']) 这行代码使用 Pandas 的 to_datetime() 函数,将 date 列的数据从字符串格式转换为日期格式。

to_datetime() 函数接受一个字符串或字符串列表,并将它们转换为 Pandas 的 Timestamp 对象。Timestamp 对象是 Pandas 用来表示日期和时间的数据类型。这行代码将转换后的日期赋值给 date 列,并使用 date 列替换原来的字符串数据。

用户可使用 dt 属性访问日期的属性:
print(df['date'].dt.year)  # 获取年份
print(df['date'].dt.month)  # 获取月份
print(df['date'].dt.day)  # 获取日期
dt 是 pandas.Series 对象的一个属性访问器,提供了访问 Timestamp 对象属性的方法。在上述例子中,dt 访问 date 列的每个元素。这些元素是 Timestamp 对象,因为这些元素已经使用 to_datetime() 函数转换为日期时间格式了。

相关文章