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

2024-04-28 06:04

本文主要是介绍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还提供了大量的函数和方法,使得数据处理和分析变得更加简单和直观,这在后面的文章中会陆续介绍。

这篇关于Python_AI库 Pandas的数据结构及基本操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/942461

相关文章

AI算法工程师课程学习-数学基础-高数1-微积分

机器学习数学基础学习路线:1.高中数学-->大学2.微积分-->3.线性代数-->4.概率论-->5.优化理论。 为尽快进入到AI算法课程的学习,现在高数的学习要求: 1.看得懂,知道是什么,能听得懂,能理解讲的是什么;2.会查资料,例如通过市面上相关的AI工具来计算(省时省力),我也是第一次学AI算法工程师,我将数学基础部分的学习都记录下来,希望对走同样路的小伙伴们有些帮助。 1.微积

数据结构学习/复习12

一、排序概念与应用 二、插入排序   三、希尔排序  当间隔数为1时则为插入排序 1.一组一组排 2.多组并排  3.间隔数变化直至为1 四、性能测速代码

数据结构中的排序--归并(merge)排序

以下的图片来自网络资料:https://www.jianshu.com/p/33cffa1ce613 归并排序的思路图示: 合并两个有序数列的流程思路: C语言的实现代码: #include "stdafx.h"#include <iostream>using namespace std;void print(int data[], int n){for (int i = 0

数据结构中的排序--堆(heap)排序

堆排序的相关理论和概念可以参考网络上的资源。 堆排序涉及到的主要是完全二叉树,以及堆的理解。 堆在排序中的作用是在一个完全二叉树中选出待排序数据中的最大或者最小的值,并将这个值放置于根节点。每次只需要将根节点的值取出,放到已排好序的数列中。剩下的数据继续组成一个堆,再取出根节点放到已排好序的数列后面,一直到堆中的数据取完为止。 这里面比较重要的就是堆的构建,涉及到左右子节点以及递归的使用。

数据结构中的排序--选择(select)排序

选择排序和冒泡排序不管是在算法的思路上还是代码的实现上都差别不大。不同在于,选择排序可以算作是冒泡排序的一种改进,这种改进主要体现在数据的移动次数上面。冒泡排序每次比较后,如果后面的元素有和比当前的元素大或者小,就会交换位置。而选择排序,比较后是记录当前的最小值得位置,一趟比较完成后才做交换。这样的话,就减少了交换的次数。 选择排序的代码实现如下: #include "stdafx.h"#i

数据结构中的排序--快速排序

快速排序可以先参考:https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/369842?fr=aladdin #include "stdafx.h"#include <iostream>using namespace std;void print(int data[], int

数据结构中的排序--冒泡(bubble)排序

冒泡排序的思路:以升序为例,将数列中的第一个数拿出来,依次后后面的比较,如果比后面的数大,那么久交换,直到比较到最后一个,当这一趟比较结束后,第一个数就是最小的。然后再取第二个数,同样的依次和后面的数比较,比较结束后,这个数据就是第二小的,后面的就是依次类推。 C语言中两个for循环即可实现。   #include "stdafx.h"#include <iostream>using n

数据结构中的排序--希尔(shell)排序

shell排序是插入排序的优化,当需要排序的数据量比较大的时候,比较有帮助。 shell排序是一种分组排序,所以重点不同在于分组。如分组的大小初始值为长度的一般,每次分组的大小为之前的一般,直到为1. 原始数列         5 3 7 4 3 9 6 2 10 4 3 7 1      长度13 第一次分组6   5                6                  1

ICode国际青少年编程竞赛- Python-4级训练场-太阳能板1

ICode国际青少年编程竞赛- Python-4级训练场-太阳能板1 1、 Dev.step(3)Dev.turnRight()Dev.step(2)while Dev.energy < 60:wait()Dev.step(-6) 2、 Dev.step(7)while Dev.energy < 90:wait()Dev.step(-1)Dev.turnR

【YOLO 系列】基于YOLO V8的金属表面缺陷检测检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言: 金属表面缺陷的及时检测对于保障产品质量和生产安全至关重要。然而,传统的人工检测方法往往效率低下、耗时长,并且容易受主观因素影响。为了解决这一问题,我们提出了基于深度学习技术的金属表面缺陷检测系统。 本项目采用了Yolov8算法,这是一种高效的目标检测算法,能够在图像中快速准确地检测出各种目标。我们将其应用于金属表面缺陷的检测,旨在实现对金属表面缺陷的自动化检测和识别。 数据集的选择是