文章目录
前言
时间有限,学到哪写到哪。
一、对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 表。它包含行和列,其中每一列可以包含不同类型的数据(如整数、浮点数、字符串、布尔值等)。
- 特点
- 灵活性:支持多种数据类型(整型、浮点型、字符串等)。
- 可变性:可以动态添加、删除或修改行和列。
- 索引:每一行和每一列都可以有自定义的标签索引,便于数据选择和操作。
- 强大的功能:内置许多数据处理、清洗、过滤、分组和聚合等功能。
创建 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 中的行或列。
- df.drop() 方法
drop() 方法的基本语法如下:
DataFrame.drop(labels, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
- 各个参数说明
-
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
- 逻辑条件
在表达式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
- 行过滤
在df[df['Age'] > 30]
中,方括号内的布尔 Series 被用作索引来选择 DataFrame 中满足条件的行。只有那些对应布尔值为True
的行会被保留下来。 - 最终结果
执行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:
- 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
- groupby()
-
作用:
groupby()
方法用于将 DataFrame 按照某一列或多列进行分组。在这里,我们使用df.groupby('City')
将 DataFrame 按City
列进行分组,这意味着所有相同城市的行会被放在同一组中。 -
结果: 分组后,会得到一个分组对象(
GroupBy
对象),这个对象包含了所有分组的信息。
- 索引选择
选择列:['Age']
部分是从分组对象中选择我们感兴趣的列。在此示例中,我们只关心Age
列,因此我们通过['Age']
来选择该列。这使得后续的聚合操作仅针对所选列进行。 - 计算均值
计算均值:mean()
函数用于计算每个组中Age
列的平均值。对于每个城市,Pandas 会计算所有属于该城市的人的年龄的平均值。 - 最终结果
执行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
- 结果解析
- 索引: 输出的索引是不同的城市名称。
- 值: 对应每个城市的值是该城市所有人的平均年龄。例如,“Chicago” 的平均年龄是 (35 + 30) / 2 = 32.5。
- 总结
- 灵活性:
groupby()
方法可以与多个聚合函数结合使用,例如sum()
、count()
、max()
等。还可以同时对多列进行分组和聚合,比如df.groupby(['City'])[['Age', 'Name']].count()
。
example: df.groupby(['City'])[['Age', 'Name']].count()
result_2=df.groupby(['City'])[['Age',