Python_AI库 Pandas的数据结构及基本操作

Python_AI库 Pandas的数据结构及基本操作

本文默认读者具备以下技能:

  • 熟悉python基础知识,vscode或其它编辑工具
  • 熟悉表格文件的基本操作
  • 具备自主扩展学习能力

本文篇幅较长,但比较重要,希望读者可以认真看完并实例运行。

Pandas提供了两种主要的数据结构,它们分别是Series、DataFrame,它们都是建立在Numpy数组之上,因此运行速度很快。以下是对这三种数据结构的详细介绍:

  1. Series

    • 一维带标签的同质数组,大小不可变。
    • 可以将标量值、字典、列表等作为输入数据来创建Series对象。
    • Series有一个标签,用于标识每个数据点,可以看作是数据的一维表示。
  2. DataFrame(最常用的数据结构,要重点了解):

    • 通用的二维带标签的表格结构,其中列的类型可能不同,大小可变。
    • 可以从字典、列表、数组等创建DataFrame。
    • DataFrame有行索引(index)和列索引(columns),可以方便地进行数据的选取、切片和聚合等操作。
    • DataFrame是Pandas的核心数据结构,非常适合存储和处理表格型数据。
  3. Panel(因结构复杂,使用少,已弃用,这里仅作扩展介绍,避免读者看到较早以前的教程时不理解):

    • 通用的三维带标签的数组,大小可变。
    • Panel可以看作是多个DataFrame的容器,用于处理三维数据。
    • 由于其复杂性,Panel在实际应用中较少使用,通常可以通过其他方式(如多层索引的DataFrame)来处理三维数据。

Series的基本操作

  1. 创建Series
python 复制代码
import pandas as pd

# 使用列表创建Series
s1 = pd.Series([1, 2, 3, 4, 5])
print(s1)

# 使用NumPy数组创建Series
import numpy as np
s2 = pd.Series(np.arange(10))
print(s2)

# 使用字典创建Series,字典的键将作为索引,值将作为数据
data = {'a': 1, 'b': 2, 'c': 3}
s3 = pd.Series(data)
print(s3)
  1. 访问与切片
python 复制代码
# 访问Series中的单个元素
print(s1[0])  # 使用位置索引访问第一个元素
print(s3['a'])  # 使用标签索引访问键为'a'的元素

# 切片操作
sub_s1 = s1[1:4]  # 访问第二个到第四个元素(不包含第四个)
print(sub_s1)

# 使用标签切片
sub_s3 = s3['a':'c']  # 访问键从'a'到'c'的元素(包含'a'和'c')
print(sub_s3)
  1. 索引操作
python 复制代码
# 查看Series的索引
print(s3.index)

# 重新设置Series的索引
s3.index = ['x', 'y', 'z']
print(s3)
  1. 数据操作
python 复制代码
# 对Series进行数学运算
s4 = s1 * 2  # 每个元素乘以2
print(s4)

# 对Series应用函数
s5 = s1.apply(lambda x: x**2)  # 对每个元素求平方
print(s5)

# 计算统计量
mean_value = s1.mean()  # 计算均值
std_dev = s1.std()  # 计算标准差
print(f"Mean: {mean_value}, Std Dev: {std_dev}")
  1. 缺失数据处理
python 复制代码
# 创建一个包含缺失值的Series
s6 = pd.Series([1, 2, np.nan, 4, 5])
print(s6)

# 填充缺失值
s6_filled = s6.fillna(0)  # 将缺失值替换为0
print(s6_filled)

# 判断元素是否为缺失值
is_missing = s6.isnull()
print(is_missing)
  1. 排序
python 复制代码
# 对Series进行排序
sorted_s3 = s3.sort_values()  # 按值升序排序
print(sorted_s3)

sorted_s3_desc = s3.sort_values(ascending=False)  # 按值降序排序
print(sorted_s3_desc)
  1. 唯一值与频率统计
python 复制代码
# 获取Series中的唯一值
unique_values = s1.unique()
print(unique_values)

# 统计每个唯一值出现的频率
value_counts = s1.value_counts()
print(value_counts)

以上的例子是Series数据结构的基本操作,包括创建、访问与切片、索引操作、数据操作、缺失数据处理、排序以及唯一值与频率统计等。Series作为Pandas的基础数据结构之一,提供了丰富的API来方便地进行数据处理和分析。通过结合这些基本操作,可以有效地处理和分析一维数据。

DataFrame的基本操作

  1. 创建DataFrame
python 复制代码
import pandas as pd

# 使用字典列表创建DataFrame
data = [
    {'Name': 'Alice', 'Age': 25, 'City': 'New York'},
    {'Name': 'Bob', 'Age': 30, 'City': 'Paris'},
    {'Name': 'Charlie', 'Age': 35, 'City': 'London'}
]
df = pd.DataFrame(data)
print(df)

# 使用二维数组或列表创建DataFrame
data_array = [
    [1, 'A', 100],
    [2, 'B', 200],
    [3, 'C', 300]
]
columns = ['ID', 'Letter', 'Number']
df_array = pd.DataFrame(data_array, columns=columns)
print(df_array)
  1. 访问与切片
python 复制代码
# 访问列
names = df['Name']
print(names)

# 访问多列
subset = df[['Name', 'Age']]
print(subset)

# 访问行
first_row = df.iloc[0]  # 使用整数位置索引
print(first_row)

# 访问特定单元格
age_bob = df.at[1, 'Age']  # 使用行标签和列名
print(age_bob)

# 切片操作
subset_df = df.iloc[1:3, [0, 2]]  # 选择第二行到第三行(不包含第三行)的'Name'和'City'列
print(subset_df)
  1. 索引操作
python 复制代码
# 查看DataFrame的索引和列名
print(df.index)
print(df.columns)

# 重新设置DataFrame的索引
df.index = ['a', 'b', 'c']
print(df)

# 重命名列名
df.columns = ['FullName', 'AgeYears', 'ResidentCity']
print(df)
  1. 数据操作
python 复制代码
# 对DataFrame中的列进行数学运算
df['AgeSquared'] = df['Age'] ** 2  # 创建一个新列,值为'Age'列每个元素的平方
print(df)

# 对DataFrame应用函数
df['CityUpper'] = df['City'].str.upper()  # 将'City'列中的每个元素转换为大写
print(df)

# 使用applymap对DataFrame中的每个元素应用函数
df_doubled = df.applymap(lambda x: x * 2 if isinstance(x, (int, float)) else x)
print(df_doubled)

# 计算每列的和、平均值等统计量
column_sums = df['Age'].sum()
column_mean = df['Age'].mean()
print(f"Sum of Age: {column_sums}, Mean of Age: {column_mean}")
  1. 数据筛选
python 复制代码
# 使用布尔索引筛选数据
young_people = df[df['Age'] < 30]  # 选择年龄小于30的行
print(young_people)

# 使用query方法筛选数据
filtered_df = df.query("Age > 28 and City == 'New York'")  # 选择年龄大于28且城市为'New York'的行
print(filtered_df)

# 使用loc和iloc结合标签和位置进行筛选
filtered_df_loc = df.loc[df['City'].isin(['Paris', 'London']), ['Name', 'Age']]
print(filtered_df_loc)
  1. 缺失数据处理
python 复制代码
# 创建一个包含缺失值的DataFrame
df_with_na = pd.DataFrame({
    'A': [1, 2, np.nan],
    'B': [5, np.nan, np.nan],
    'C': [1, 2, 3]
})
print(df_with_na)

# 填充缺失值
df_filled = df_with_na.fillna(0)  # 将缺失值替换为0
print(df_filled)

# 删除含有缺失值的行
df_dropped = df_with_na.dropna()
print(df_dropped)
  1. 排序

单列排序

​ 假设我们有一个包含员工信息的DataFrame,我们想要按照"Salary"列对员工进行升序排序:

python 复制代码
import pandas as pd

# 创建一个示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Salary': [50000, 60000, 45000, 55000]
}
df = pd.DataFrame(data)

# 按Salary列升序排序
sorted_df_asc = df.sort_values(by='Salary')
print(sorted_df_asc)

# 按Salary列降序排序
sorted_df_desc = df.sort_values(by='Salary', ascending=False)
print(sorted_df_desc)

多列排序

​ 有时我们可能希望先按照一列排序,然后在该列值相同的情况下按照另一列排序。例如,先按"Department"排序,再 按"Salary"排序:

python 复制代码
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Department': ['HR', 'Engineering', 'Engineering', 'HR'],
    'Salary': [50000, 65000, 60000, 55000]
}
df = pd.DataFrame(data)

# 先按Department列排序,再按Salary列升序排序
sorted_df_multi = df.sort_values(by=['Department', 'Salary'])
print(sorted_df_multi)

按照列名的字母顺序对列进行排序

​ 如果您想按照列名的字母顺序对DataFrame的列进行排序,可以使用sort_index()方法,并通过参数axis=1指定对列进行操作:

python 复制代码
# 假设df是一个已经存在的DataFrame
sorted_columns_df = df.sort_index(axis=1)
print(sorted_columns_df)

以上例子中,sort_values()方法用于对DataFrame的行进行排序,而sort_index()方法则用于对行或列的索引进行排序。通过调整by参数和ascending参数,可以控制排序的列和排序的方向(升序或降序)。

请注意,这些排序操作不会改变原始DataFrame,而是返回一个新的排序后的DataFrame。如果希望直接修改原始DataFrame,可以使用inplace=True参数,如df.sort_values(by='Salary', inplace=True)

series和dataframe数据结构使得Pandas在处理数据时非常灵活和高效,能够轻松地进行数据的清洗、转换、聚合和分析等操作。同时,Pandas还提供了大量的函数和方法,使得数据处理和分析变得更加简单和直观,这在后面的文章中会陆续介绍。

相关推荐
西柚与蓝莓1 小时前
【开源开放体系总结】
python
萱仔学习自我记录1 小时前
PEFT库和transformers库在NLP大模型中的使用和常用方法详解
人工智能·机器学习
hsling松子4 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
belldeep4 小时前
python:reportlab 将多个图片合并成一个PDF文件
python·pdf·reportlab
正在走向自律4 小时前
机器学习框架
人工智能·机器学习
好吃番茄5 小时前
U mamba配置问题;‘KeyError: ‘file_ending‘
人工智能·机器学习
CV-King6 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
禁默6 小时前
2024年计算机视觉与艺术研讨会(CVA 2024)
人工智能·计算机视觉
FreakStudio7 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
whaosoft-1437 小时前
大模型~合集3
人工智能