随笔-23年数学建模笔记


前言

时间有限,学到哪写到哪。


一、对Excel表格的操作

pandas

声明:

import pandas as pd
#  读取Excel文件
file_path = 'D:/school_competition/data_excel_list/表1-患者列表及临床信息.xlsx'  # Excel文件路径
list_1 = pd.read_excel(file_path)

pd.read_excel(file_path_1) 是使用 pandas 库从 Excel 文件中读取数据的函数。

  • 参数
    file_path_1: 指定要读取的 Excel 文件的路径,可以是绝对路径或相对路径。
  • 返回值
    该函数返回一个 pandas DataFrame,其中包含 Excel 文件中的数据。每一列将对应于 Excel 中的列,每一行对应于 Excel 中的行。

DataFrame

Pandas DataFrame 是一种用于存储和操作表格数据的数据结构,是 Pandas 库的核心组件之一。

以下是对 Pandas DataFrame 的详细叙述,包括其特点、创建方式、常用操作等。

什么是 DataFrame

DataFrame 是一个二维标签数据结构,类似于电子表格或 SQL 表。它包含行和列,其中每一列可以包含不同类型的数据(如整数、浮点数、字符串、布尔值等)。

  1. 特点
  • 灵活性:支持多种数据类型(整型、浮点型、字符串等)。
  • 可变性:可以动态添加、删除或修改行和列。
  • 索引:每一行和每一列都可以有自定义的标签索引,便于数据选择和操作。
  • 强大的功能:内置许多数据处理、清洗、过滤、分组和聚合等功能。

创建 DataFrame

可以通过多种方式创建 DataFrame:
3.1 从字典创建

import pandas as pd

data = {
   
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [30, 25, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
}

df = pd.DataFrame(data)

3.2 从列表创建

data = [['Alice', 30, 'New York'], ['Bob', 25, 'Los Angeles'], ['Charlie', 35, 'Chicago']]
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])

3.3 从 NumPy 数组创建

import numpy as np

data = np.array([['Alice', 30, 'New York'], ['Bob', 25, 'Los Angeles'], ['Charlie', 35, 'Chicago']])
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])

列表和Numpy数组转为DataFrame

常用操作

访问数据

选择列:
df['Name']  # 返回 Name 列

选择行:
df.iloc[0]  # 返回第一行
df.loc[0]   # 根据标签返回第一行

df.iloc[:, :-1] 是用于 pandas 数据框(DataFrame)中的一种索引方法。具体来说,它的作用是选择数据框 df 中的所有行(:)和除最后一列之外的所有列(:-1)。
因此,df.iloc[:, :-1] 将返回一个新的数据框,其中包含原数据框的所有行和除最后一列以外的所有列。v

# 加载数据
file_path = 'D:/school_competition/data_excel_list/school_competition_1_b_ex_list.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1')

# 将数据拆分为特征(X)和目标变量(y)
X = df.iloc[:, :-1]
y = df.iloc[:, -1]

# 分割训练集(前100行)和测试集(后160行)
X_train = X.iloc[:100, :]
X_test = X.iloc[:160, :]
y_train = y.iloc[:100]
y_test = y.iloc[:160]

在这里插入图片描述
school_competition_1_b_ex_list是一个有着73列的表格,其中最后一列为目的变量


切片选择:
df.iloc[0:2]  # 返回前两行

添加和删除

添加列:
df['Salary'] = [70000, 80000, 90000]

删除列:
df.drop('Salary', axis=1, inplace=True)  # 删除 Salary 列

在 Pandas 中,drop() 方法用于删除 DataFrame 中的行或列。

  1. df.drop() 方法
    drop() 方法的基本语法如下:
DataFrame.drop(labels, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

  1. 各个参数说明
  • labels: 要删除的行或列的名称(标签)。在这个例子中,‘Salary’ 是要删除的列名。

  • axis: 指定操作的axis=0 表示删除行axis=1 表示删除列。在这里,我们使用 axis=1 来表示我们想要删除的是列,而不是行。

  • inplace: 一个布尔值,默认为 False。

    • 如果为 True,则会在原 DataFrame 上进行修改,不返回任何新的 DataFrame。
    • 如果为 False(默认值),则不会修改原 DataFrame,而是返回一个新的 DataFrame,该 DataFrame 不包含已删除的行或列。

数据过滤

filtered_df = df[df['Age'] > 30]  # 过滤年龄大于 30 的行

example:

首先,假设我们有以下的 DataFrame:

import pandas as pd

data = {
   
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [30, 25, 35, 40],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}

df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)

输出如下:

      Name  Age         City
0    Alice   30     New York
1      Bob   25  Los Angeles
2  Charlie   35      Chicago
3    David   40      Houston
  1. 逻辑条件
    在表达式 df[df['Age'] > 30] 中,df['Age'] > 30 是一个逻辑条件,它会返回一个布尔值 Series。对于每一行,如果 Age 列的值大于 30,则该行对应的位置为 True,否则为 False

例如,对上述 DataFrame 应用这个条件,将得到以下布尔 Series:

0    False
1    False
2     True
3     True
Name: Age, dtype: bool

  1. 行过滤
    df[df['Age'] > 30] 中,方括号内的布尔 Series 被用作索引来选择 DataFrame 中满足条件的行。只有那些对应布尔值为True的行会被保留下来。
  2. 最终结果
    执行 df[df['Age'] > 30] 后,我们得到一个新的 DataFrame,其中仅包含年龄大于 30 的行:
result_df = df[df['Age'] > 30]
print("年龄大于 30 的行:")
print(result_df)

输出将是:

      Name  Age     City
2  Charlie   35  Chicago
3    David   40  Houston


数据聚合

grouped_df = df.groupby('City')['Age'].mean()  # 按城市分组并计算平均年龄

df.groupby('City')['Age'].mean() 是 Pandas 库中用于数据聚合的一个表达式,具体来说,它用于根据城市(City 列)对年龄(Age 列)进行分组,并计算每个城市的平均年龄。下面我将详细解释这个表达式的各个部分及其工作原理。

example:

  1. DataFrame
    假设我们有以下 DataFrame:
import pandas as pd

data = {
   
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [30, 25, 35, 40, 30],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Chicago']
}

df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)

输出如下:

      Name  Age         City
0    Alice   30     New York
1      Bob   25  Los Angeles
2  Charlie   35      Chicago
3    David   40      Houston
4      Eve   30      Chicago
  1. groupby()
  • 作用: groupby() 方法用于将 DataFrame 按照某一列或多列进行分组。在这里,我们使用 df.groupby('City') 将 DataFrame 按 City 列进行分组,这意味着所有相同城市的行会被放在同一组中。

  • 结果: 分组后,会得到一个分组对象(GroupBy对象),这个对象包含了所有分组的信息。

  1. 索引选择
    选择列: ['Age'] 部分是从分组对象中选择我们感兴趣的列。在此示例中,我们只关心 Age 列,因此我们通过 ['Age'] 来选择该列。这使得后续的聚合操作仅针对所选列进行。
  2. 计算均值
    计算均值: mean() 函数用于计算每个组中 Age 列的平均值。对于每个城市,Pandas 会计算所有属于该城市的人的年龄的平均值。
  3. 最终结果
    执行 df.groupby('City')['Age'].mean() 后,我们将得到一个 Series,其中索引为城市名,值为对应城市的平均年龄:
result = df.groupby('City')['Age'].mean()
print("每个城市的平均年龄:")
print(result)

输出将是:

City
Chicago        32.5
Houston        40.0
Los Angeles    25.0
New York       30.0
Name: Age, dtype: float64
  1. 结果解析
  • 索引: 输出的索引是不同的城市名称。
  • 值: 对应每个城市的值是该城市所有人的平均年龄。例如,“Chicago” 的平均年龄是 (35 + 30) / 2 = 32.5。
  1. 总结
  • 灵活性:groupby()方法可以与多个聚合函数结合使用,例如 sum()count()max() 等。还可以同时对多列进行分组和聚合,比如 df.groupby(['City'])[['Age', 'Name']].count()

example: df.groupby(['City'])[['Age', 'Name']].count()

result_2=df.groupby(['City'])[['Age', 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值