当前位置: 首页 > article >正文

【机器学习基础 4】 Pandas库

一、Pandas库简介

        Pandas 是一个开源的 Python 数据分析库,主要用于数据清洗、处理、探索与分析。其核心数据结构是 Series(一维数据)和 DataFrame(二维表格数据),可以让我们高效地操作结构化数据。Pandas 提供了许多灵活且高效的数据操作方法,能够快速地进行数据筛选、聚合、转换和可视化,是数据科学和机器学习工作流中非常重要的一环。

二、Pandas库安装

  通常直接通过 pip 来安装;当然,在Anaconda虚拟环境中亦可用如下两种方式:

pip install pandas

conda install pandas

  在编写中导入Pandas库,我们通常会习惯将其简化为pd:

import pandas as pd

三、常用的Pandas函数

1、数据读取

Pandas库支持多种数据格式的导入,例如 CSV、Excel、SQL 数据库、JSON 等,方便我们从各种数据源中获取数据。假设我们有一个CSV文件,内部如下:

ID,Name,Age,Score
1,Tom,22,85.0
2,Lily,21,92.0
3,Jack,23,78.0
4,Lucy,22,89.0
5,Rose,21,95.0

我们想要读取,则可以:

import pandas as pd

# 读取 CSV 文件
df = pd.read_csv('sample.csv')  
print(df.head())  # 查看前 5 行

样例输出:

   ID Name  Age   Score
0   1  Tom   22   85.0
1   2  Lily  21   92.0
2   3  Jack  23   78.0
3   4  Lucy  22   89.0
4   5  Rose  21   95.0

 2、查看数据

如果我们想快速检查数据的基本信息,如行数、列数、数据类型,则可以前面的基础上加上:

print(df.info())    # 查看数据的基本信息
print(df.describe())  # 生成数据的统计摘要

样例输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   ID      5 non-null      int64
 1   Name    5 non-null      object
 2   Age     5 non-null      int64
 3   Score   5 non-null      float64
dtypes: float64(1), int64(2), object(1)
memory usage: 288.0+ bytes
None
             ID       Age      Score
count  5.000000   5.00000   5.000000
mean   3.000000  21.80000  87.800000
std    1.581139   0.83666   6.610598
min    1.000000  21.00000  78.000000
25%    2.000000  21.00000  85.000000
50%    3.000000  22.00000  89.000000
75%    4.000000  22.00000  92.000000
max    5.000000  23.00000  95.000000

 3、数据选择与过滤

当然,我们还可以对数据进行选择和过滤,就像下面这样:

# 选择某一列
print(df['Name'],'\n')  

# 选择多列
print(df[['Name', 'Score']],'\n')  

# 选择特定行(iloc 按索引,loc 按标签)
print(df.iloc[1])  
print(df.loc[df['Score'] > 90])  # 筛选成绩大于 90 的行

样例输出:

0     Tom
1    Lily
2    Jack
3    Lucy
4    Rose
Name: Name, dtype: object 

   Name  Score
0   Tom   85.0
1  Lily   92.0
2  Jack   78.0
3  Lucy   89.0
4  Rose   95.0 

ID          2
Name     Lily
Age        21
Score    92.0
Name: 1, dtype: object
   ID  Name  Age  Score
1   2  Lily   21   92.0
4   5  Rose   21   95.0

4、数据清洗

Pandas库还可以处理缺失值(用dropna、fillna)、重复值(用drop_duplicates)、替换值(用replace)等。

例如:(我们先把CSV中Rose的score删掉

# 删除缺失值
df_cleaned = df.dropna()
print("删除缺失值后的DataFrame:")
print(df_cleaned.head())

# 填充缺失值
df_filled = df.fillna(value={'Score': df['Score'].mean()})
print("\n填充缺失值后的DataFrame:")
print(df_filled.head())

# 删除重复值
df_unique = df.drop_duplicates()
print("\n删除重复值后的DataFrame:")
print(df_unique.head())

# 替换值
df_replaced = df.replace({'Tom': 'Tommy'})
print("\n替换值后的DataFrame:")
print(df_replaced.head())

样例输出:

删除缺失值后的DataFrame:
   ID  Name  Age  Score 
0   1   Tom   22   85.0 
1   2  Lily   21   92.0 
2   3  Jack   23   78.0 
3   4  Lucy   22   89.0 

填充缺失值后的DataFrame:
   ID  Name  Age  Score 
0   1   Tom   22   85.0 
1   2  Lily   21   92.0 
2   3  Jack   23   78.0 
3   4  Lucy   22   89.0 
4   5  Rose   21   86.0 

删除重复值后的DataFrame:
   ID  Name  Age  Score
0   1   Tom   22   85.0
1   2  Lily   21   92.0
2   3  Jack   23   78.0
3   4  Lucy   22   89.0
4   5  Rose   21    NaN

替换值后的DataFrame:
   ID   Name  Age  Score
0   1  Tommy   22   85.0
1   2   Lily   21   92.0
2   3   Jack   23   78.0
3   4   Lucy   22   89.0
4   5   Rose   21    NaN

5、数据的排序、分组求均值、合并、连接

排序会使用到sort_values函数,分组则使用groupby,合并使用merge,连接使用concat

例如:

# 按 'Score' 排序
df_sorted = df.sort_values(by='Score', ascending=False)
print("按 'Score' 排序后的数据:\n", df_sorted)

# 分组并求均值
df_grouped = df.groupby('Age')['Score'].mean()
print("按 'Age' 分组并求 'Score' 的均值:\n", df_grouped)

# 合并数据
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Class': ['A', 'B', 'A']})
df_merged = df.merge(df1, on='ID', how='left')
print("合并后的数据:\n", df_merged)

# 连接多个 DataFrame
df_concat = pd.concat([df, df1], axis=0)
print("连接后的数据:\n", df_concat)

 注意:DataFrame 是Pandas库中的一个函数,用于创建一个数据框(DataFrame)。
        {'ID': [1, 2, 3], 'Class': ['A', 'B', 'A']} 是一个字典,其中键是列名,值是对应的数据。
        'ID' 是列名,对应的数据是 [1, 2, 3];'Class' 是列名,对应的数据是 ['A', 'B', 'A']。
        df1 是一个新创建的数据框,包含两列:ID和Class

        merge是Pandas中用于合并两个数据框的函数。
        df1 是要与当前数据框 df 合并的另一个数据框。
        on='ID' 指定了合并的键(key),即根据两表中的 ID列进行合并。
        how='left' 指定了合并的方式为左连接(left join)。这意味着结果将包含左表(即 df)中的所有行,即使右表(即 df1)中没有匹配的行。如果右表中没有匹配的行,结果中对应的列将填充为NaN。

样例输出:

按 'Score' 排序后的数据:
    ID  Name  Age  Score
4   5  Rose   21   95.0
1   2  Lily   21   92.0
3   4  Lucy   22   89.0
0   1   Tom   22   85.0
2   3  Jack   23   78.0
按 'Age' 分组并求 'Score' 的均值:
 Age
21    93.5
22    87.0
23    78.0
Name: Score, dtype: float64      
合并后的数据:
    ID  Name  Age  Score Class
0   1   Tom   22   85.0     A
1   2  Lily   21   92.0     B
2   3  Jack   23   78.0     A
3   4  Lucy   22   89.0   NaN
4   5  Rose   21   95.0   NaN
连接后的数据:
    ID  Name   Age  Score Class
0   1   Tom  22.0   85.0   NaN
1   2  Lily  21.0   92.0   NaN
2   3  Jack  23.0   78.0   NaN
3   4  Lucy  22.0   89.0   NaN
4   5  Rose  21.0   95.0   NaN
0   1   NaN   NaN    NaN     A
1   2   NaN   NaN    NaN     B
2   3   NaN   NaN    NaN     A

6、数据转换

例如:

# 创建数据透视表
pivot_table = df.pivot_table(values='Score', index='Age', aggfunc='mean')
print("透视表:\n", pivot_table)

# 使用 apply() 转换数据
df['Score_Squared'] = df['Score'].apply(lambda x: x ** 2)
print("转换后的数据:\n", df)

# 更改数据类型
df['Age'] = df['Age'].astype(float)
print("更改数据类型后的数据:\n", df)

样例输出:

透视表:
      Score
Age       
21    93.5
22    87.0
23    78.0
转换后的数据:
    ID  Name  Age  Score  Score_Squared
0   1   Tom   22   85.0         7225.0 
1   2  Lily   21   92.0         8464.0 
2   3  Jack   23   78.0         6084.0 
3   4  Lucy   22   89.0         7921.0 
4   5  Rose   21   95.0         9025.0 
更改数据类型后的数据:
    ID  Name   Age  Score  Score_Squared
0   1   Tom  22.0   85.0         7225.0
1   2  Lily  21.0   92.0         8464.0
2   3  Jack  23.0   78.0         6084.0
3   4  Lucy  22.0   89.0         7921.0
4   5  Rose  21.0   95.0         9025.0

7、日期与时间处理

例如:

# 创建日期列
df['Date'] = pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'])

# 提取年份、月份、星期
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Weekday'] = df['Date'].dt.day_name()

print(df)

样例输出:

   ID  Name  Age  Score       Date  Year  Month    Weekday
0   1   Tom   22   85.0 2023-01-01  2023      1     Sunday
1   2  Lily   21   92.0 2023-01-02  2023      1     Monday
2   3  Jack   23   78.0 2023-01-03  2023      1    Tuesday
3   4  Lucy   22   89.0 2023-01-04  2023      1  Wednesday
4   5  Rose   21   95.0 2023-01-05  2023      1   Thursday


http://www.kler.cn/a/599512.html

相关文章:

  • 大模型应用(Java)2025/3/24
  • [Lc18_BFS拓扑排序] 邻接表 | 课程表I II
  • AI Tokenization
  • windows与linux开发板之间设置nfs共享文件
  • 23种设计模式-外观(Facade)设计模式
  • C#中 String类API(函数)
  • 数据结构八股
  • Android11-12-13 替换系统默认壁纸
  • 图解AUTOSAR_CP_LargeDataCOM
  • 构建智能变量命名助手:解决 FastAPI 与 Ollama 集成难题
  • 基础-语音是怎么进到LLM里面的
  • 平芯微PW2609A过压保护芯片应用电路
  • 安科瑞新能源防逆流解决方案:守护电网安全,赋能绿色能源利用
  • Packaging Process
  • Geotools自动识别SLD并生成图例图片实战-以Polygon数据为例
  • 万象更新(一)VTK 坐标轴、相机方向坐标轴、立方体坐标轴
  • Linux共享内存
  • HarmonyOS NEXT 基于原生能力获取视频缩略图
  • 2025年3月24日(matlab/simulink 问题集)
  • JAVA线程安全的集合类分类