Pandas

Pandas简介

Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。

Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。

Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。

Pandas 主要引入了两种新的数据结构:DataFrame 和 Series

Series: 类似于一维数组或列表,是由一组数据以及与之相关的数据标签(索引)构成。Series 可以看作是 DataFrame 中的一列,也可以是单独存在的一维数据结构。

DataFrame: 类似于一个二维表格,它是 Pandas 中最重要的数据结构。DataFrame 可以看作是由多个 Series 按列排列构成的表格,它既有行索引也有列索引,因此可以方便地进行行列选择、过滤、合并等操作。

DataFrame 可视为由多个 Series 组成的数据结构:

Pandas 安装

安装 pandas 需要基础环境是 Python,Pandas 是一个基于 Python 的库,因此你需要先安装 Python,然后再通过 Python 的包管理工具 pip 安装 Pandas。

使用 pip 安装 pandas:

pip install pandas

安装成功后,我们就可以导入 pandas 包使用:

查看 pandas 版本

>>> import pandas
>>> pandas.__version__  # 查看版本
'1.1.5'

举例:
一个简单的 pandas 实例:

import pandas as pd

mydataset = {
  'sites': ["Google", "Runoob", "Wiki"],
  'number': [1, 2, 3]
}

myvar = pd.DataFrame(mydataset)

print(myvar)

Pandas 数据结构 - Series

Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。

Series 特点:

  • 一维数组:Series是一维的,这意味着它只有一个轴(或维度),类似于 Python 中的列表。

  • 索引: 每个 Series 都有一个索引,它可以是整数、字符串、日期等类型。如果不指定索引,Pandas 将默认创建一个从 0 开始的整数索引。

  • 数据类型: Series 可以容纳不同数据类型的元素,包括整数、浮点数、字符串、Python 对象等。

  • 大小不变性:Series 的大小在创建后是不变的,但可以通过某些操作(如 append 或 delete)来改变。

  • 操作:Series 支持各种操作,如数学运算、统计分析、字符串处理等。

  • 缺失数据:Series 可以包含缺失数据,Pandas 使用NaN(Not a Number)来表示缺失或无值。

  • 创建 Series

  • 可以使用 pd.Series() 构造函数创建一个 Series 对象,传递一个数据数组(可以是列表、NumPy 数组等)和一个可选的索引数组。创建一个简单的 Series 实例:

  • pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

  • 参数说明:

  • data:Series 的数据部分,可以是列表、数组、字典、标量值等。如果不提供此参数,则创建一个空的 Series。
  • index:Series 的索引部分,用于对数据进行标记。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • dtype:指定 Series 的数据类型。可以是 NumPy 的数据类型,例如 np.int64np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
  • name:Series 的名称,用于标识 Series 对象。如果提供了此参数,则创建的 Series 对象将具有指定的名称。
  • copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。
  • fastpath:是否启用快速路径。默认为 False。启用快速路径可能会在某些情况下提高性能。

    创建一个简单的 Series 实例:
  • import pandas as pd

    a = [1, 2, 3]

    myvar = pd.Series(a)

    print(myvar)
  • 从上图可知,如果没有指定索引,索引值就从 0 开始,我们可以根据索引值读取数据。

  • 根据索引值读取数据:

    import pandas as pd

    a = ["Google", "Runoob", "Wiki"]

    myvar = pd.Series(a, index = ["x", "y", "z"])

    print(myvar["y"])
    输出结果如下:
    Runoob

    我们也可以使用 key/value 对象,类似字典来创建 Series:

    import pandas as pd

    sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
    myvar = pd.Series(sites)
    print(myvar)

  • 输出结果如下:


  • 从上图可知,字典的 key 变成了索引值。

  • 如果我们只需要字典中的一部分数据,只需要指定需要数据的索引即可,如下实例:

  • import pandas as pd

    sites = {1: "Google", 2: "Runoob", 3: "Wiki"}

    myvar = pd.Series(sites, index = [1, 2])

    print(myvar)

  • 输出结果如下:

Pandas 数据结构 - DataFrame

DataFrame 是 Pandas 中的另一个核心数据结构,用于表示二维表格型数据。

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。

DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

DataFrame 提供了各种功能来进行数据访问、筛选、分割、合并、重塑、聚合以及转换等操作。
 

DataFrame 特点:

  • 二维结构: DataFrame 是一个二维表格,可以被看作是一个 Excel 电子表格或 SQL 表,具有行和列。可以将其视为多个 Series 对象组成的字典。

  • 列的数据类型: 不同的列可以包含不同的数据类型,例如整数、浮点数、字符串或 Python 对象等。

  • 索引DataFrame 可以拥有行索引和列索引,类似于 Excel 中的行号和列标。

  • 大小可变:可以添加和删除列,类似于 Python 中的字典。

  • 自动对齐:在进行算术运算或数据对齐操作时,DataFrame 会自动对齐索引。

  • 处理缺失数据DataFrame 可以包含缺失数据,Pandas 使用 NaN(Not a Number)来表示。

  • 数据操作:支持数据切片、索引、子集分割等操作。

  • 时间序列支持DataFrame 对时间序列数据有特别的支持,可以轻松地进行时间数据的切片、索引和操作。

  • 丰富的数据访问功能:通过 .loc.iloc 和 .query() 方法,可以灵活地访问和筛选数据。

  • 灵活的数据处理功能:包括数据合并、重塑、透视、分组和聚合等。

  • 数据可视化:虽然 DataFrame 本身不是可视化工具,但它可以与 Matplotlib 或 Seaborn 等可视化库结合使用,进行数据可视化。

  • 高效的数据输入输出:可以方便地读取和写入数据,支持多种格式,如 CSV、Excel、SQL 数据库和 HDF5 格式。

  • 描述性统计:提供了一系列方法来计算描述性统计数据,如 .describe().mean().sum() 等。

  • 灵活的数据对齐和集成:可以轻松地与其他 DataFrame 或 Series 对象进行合并、连接或更新操作。

  • 转换功能:可以对数据集中的值进行转换,例如使用 .apply() 方法应用自定义函数。

  • 滚动窗口和时间序列分析:支持对数据集进行滚动窗口统计和时间序列分析。

  • DataFrame 构造方法如下:
    pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
     

    参数说明:

  • data:DataFrame 的数据部分,可以是字典、二维数组、Series、DataFrame 或其他可转换为 DataFrame 的对象。如果不提供此参数,则创建一个空的 DataFrame。
  • index:DataFrame 的行索引,用于标识每行数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • columns:DataFrame 的列索引,用于标识每列数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • dtype:指定 DataFrame 的数据类型。可以是 NumPy 的数据类型,例如 np.int64np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
  • copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。

    Pandas DataFrame 是一个二维的数组结构,类似二维数组。
  • import pandas as pd

    data = [['Google', 10], ['Runoob', 12], ['Wiki', 13]]

    # 创建DataFrame
    df = pd.DataFrame(data, columns=['Site', 'Age'])

    # 使用astype方法设置每列的数据类型
    df['Site'] = df['Site'].astype(str)
    df['Age'] = df['Age'].astype(float)

    print(df)

    也可以使用字典来创建:
    import pandas as pd

    data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}

    df = pd.DataFrame(data)

    print (df)
    输出结果如下:


    DataFrame 数据类型一个表格,包含 rows(行) 和 columns(列):

  • 可以使用字典(key/value),其中字典的 key 为列名:
    import pandas as pd

    data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

    df = pd.DataFrame(data)

    print (df)

    输出结果为:


  • 没有对应的部分数据为 NaN

  • Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1,以此类推:

  • import pandas as pd

    data = {
      "calories": [420, 380, 390],
      "duration": [50, 40, 45]
    }

    # 数据载入到 DataFrame 对象
    df = pd.DataFrame(data)

    # 返回第一行
    print(df.loc[0])
    # 返回第二行
    print(df.loc[1])

    输出结果如下:



  • DataFrame 的属性和方法
    DataFrame 对象有许多属性和方法,用于数据操作、索引和处理,例如:shape、columns、index、head()、tail()、info()、describe()、mean()、sum() 等。
    # DataFrame 的属性和方法
    print(df.shape)     # 形状
    print(df.columns)   # 列名
    print(df.index)     # 索引
    print(df.head())    # 前几行数据,默认是前 5 行
    print(df.tail())    # 后几行数据,默认是后 5 行
    print(df.info())    # 数据信息
    print(df.describe())# 描述统计信息
    print(df.mean())    # 求平均值
    print(df.sum())     # 求和

    举例:
     

    import pandas as pd
    
    data = {
      "calories": [420, 380, 390],
      "duration": [50, 40, 45]
    }
    
    # 数据载入到 DataFrame 对象
    df = pd.DataFrame(data)
    
    print(df.shape)# 形状
    print(df.mean())# 求平均值
    
    输出结果如下:
    

Pandas CSV 文件

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。

Pandas 可以很方便的处理 CSV 文件,以 nba.csv 为例

import pandas as pd

df = pd.read_csv('nba.csv')

print(df.to_string())

to_string() 用于返回 DataFrame 类型的数据。
如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 ... 代替。
import pandas as pd

df = pd.read_csv('nba.csv')

print(df)

输出结果为:

也可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件:
import pandas as pd
   
# 三个字段 name, site, age
nme = ["Google", "Runoob", "Taobao", "Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]
   
# 字典
dict = {'name': nme, 'site': st, 'age': ag}
     
df = pd.DataFrame(dict)
 
# 保存 dataframe
df.to_csv('site.csv')

执行成功后,我们打开 site.csv 文件,显示结果如下:



数据处理

head()

head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。
import pandas as pd

df = pd.read_csv('nba.csv')

print(df.head())
输出结果为:



tail()
tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN
import pandas as pd

df = pd.read_csv('nba.csv')

print(df.tail())
输出结果为:

info()
info() 方法返回表格的一些基本信息:
import pandas as pd

df = pd.read_csv('nba.csv')

print(df.info())

输入结果为:

Pandas JSON

JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法。Pandas 可以很方便的处理 JSON 数据,如下:
import pandas as pd
data =[
{ "id": "A001",
"name": "百度",
"url": "www.baidu.com",
"likes": 61 },
{ "id": "A002",
"name": "Google",
"url": "www.google.com",
"likes": 124 },
{ "id": "A003",
"name": "淘宝",
"url": "www.taobao.com",
"likes": 45 }
]

df = pd.DataFrame(data)
print(df)
输出结果如下:


JSON 对象与 Python 字典具有相同的格式,所以我们可以直接将 Python 字典转化为 DataFrame 数据:
import pandas as pd
# 字典格式的 JSON                                                                                              
s = {
    "col1":{"row1":1,"row2":2,"row3":3},
    "col2":{"row1":"x","row2":"y","row3":"z"}
}

# 读取 JSON 转为 DataFrame                                                                                          
df = pd.DataFrame(s)
print(df)
输出结果如下:



Pandas 数据清洗

数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在数据缺失、数据格式错误、错误
数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。

 

Pandas 清洗空值

如果我们要删除包含空字段的行,可以使用 dropna() 方法,语法格式如下:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数说明:

  • axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
  • how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。
  • thresh:设置需要多少非空值的数据才可以保留下来的。
  • subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
  • inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。
     
    #删除空行数据的行
    import pandas as pd
    
    df = pd.read_csv('property-data.csv')
    
    new_df = df.dropna()
    
    print(new_df.to_string())
    
    
    #移除 ST_NUM 列中字段值为空的行:
    import pandas as pd
    
    df = pd.read_csv('property-data.csv')
    
    df.dropna(subset=['ST_NUM'], inplace = True)
    
    print(df.to_string())
    
    

    Pandas 清洗错误数据

    数据错误也是很常见的情况,我们可以对错误的数据进行替换或移除。

    以下实例会替换错误年龄的数据:
    import pandas as pd

    person = {
      "name": ['Google', 'Runoob' , 'Taobao'],
      "age": [50, 40, 12345]    # 12345 年龄数据是错误的
    }

    df = pd.DataFrame(person)

    df.loc[2, 'age'] = 30 # 修改数据

    print(df.to_string())

    输出结果如下:

  • 以下实例将 age 大于 120 的设置为 120:

  • import pandas as pd

    person = {
      "name": ['Google', 'Runoob' , 'Taobao'],
      "age": [50, 200, 12345]    
    }

    df = pd.DataFrame(person)

    for x in df.index:
      if df.loc[x, "age"] > 120:
        df.loc[x, "age"] = 120

    print(df.to_string())
    输出结果如下:

  • 46
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值