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
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. 访问与切片
# 访问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. 索引操作
# 查看Series的索引
print(s3.index)

# 重新设置Series的索引
s3.index = ['x', 'y', 'z']
print(s3)
  1. 数据操作
# 对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. 缺失数据处理
# 创建一个包含缺失值的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. 排序
# 对Series进行排序
sorted_s3 = s3.sort_values()  # 按值升序排序
print(sorted_s3)

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

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

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

DataFrame的基本操作

  1. 创建DataFrame
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. 访问与切片
# 访问列
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. 索引操作
# 查看DataFrame的索引和列名
print(df.index)
print(df.columns)

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

# 重命名列名
df.columns = ['FullName', 'AgeYears', 'ResidentCity']
print(df)
  1. 数据操作
# 对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. 数据筛选
# 使用布尔索引筛选数据
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. 缺失数据处理
# 创建一个包含缺失值的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”列对员工进行升序排序:

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”排序:

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指定对列进行操作:

# 假设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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值