第一部分:基本了解
Pandas是Python中一个非常强大和流行的数据分析库。它提供了高性能、易用的数据结构和数据分析工具。
①能够导出和导入各种文件(CSV, Excel, SQL数据库等)
②与matplotlib集成,方便绘图
③快速的数据操作(筛选,排序)
第二部分:安装
①下载pandas库
conda install pandas
②验证是否安装成功
python -c "import pandas; print(pandas.__version__)"
③卸载pandas
conda uninstall pandas
第三部分:使用
导包:
import pandas as pd
import numpy as np
(1)输出excel格式的内容
我们通过生成表的形式来研究:
需求:“输出一个语文,数学,英语,总成绩,评定等级(A,B,C,D,E)的这样的一个excel表并附带100条数据,代表100个学生”
代码:
①先安装openpyxl库,安装方式见我博客http://t.csdnimg.cn/4dsw5
②代码内容
import pandas as pd
import numpy as np
from openpyxl import load_workbook
from openpyxl.styles import Border, Side
# 设置随机种子以保证结果可重现
np.random.seed(42)
# 生成100个学生的数据
n_students = 100
# 生成随机成绩,范围为50-100
chinese = np.random.randint(50, 101, n_students)
math = np.random.randint(50, 101, n_students)
english = np.random.randint(50, 101, n_students)
# 计算总成绩
total = chinese + math + english
# 定义评定等级的函数
def get_grade(score):
if score >= 270:
return 'A'
elif score >= 240:
return 'B'
elif score >= 210:
return 'C'
elif score >= 180:
return 'D'
else:
return 'E'
# 应用评定等级函数
grades = [get_grade(score) for score in total]
# 创建DataFrame
df = pd.DataFrame({
'语文': chinese,
'数学': math,
'英语': english,
'总成绩': total,
'评定等级': grades
})
# 添加学生编号
df.index = [f'学生{i+1}' for i in range(n_students)]
df.index.name = '学生编号'
# 保存为Excel文件
excel_file = '学生成绩表.xlsx'
df.to_excel(excel_file)
# 加载工作簿
wb = load_workbook(excel_file)
ws = wb.active
# 定义加粗的边框样式
thick_border = Border(left=Side(style='medium'),
right=Side(style='medium'),
top=Side(style='medium'),
bottom=Side(style='medium'))
# 为所有单元格添加加粗的边框
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
for cell in row:
cell.border = thick_border
# 保存修改后的工作簿
wb.save(excel_file)
print(f"Excel文件已生成并添加了加粗的格子线:{excel_file}")
③输出位置
输出xlsx文件的位置在该运行程序统一目录下:
这样我们就生成了这样的一个表格:
基本操作剖析:
①写入excel文件
# 保存为Excel文件
excel_file = '学生成绩表.xlsx'
df.to_excel(excel_file)
②创建DataFrame(设置特征并填充数据)
df = pd.DataFrame({
'语文': chinese,
'数学': math,
'英语': english,
'总成绩': total,
'评定等级': grades
})
③设置排序编号
# 添加学生编号
df.index = [f'学生{i+1}' for i in range(n_students)]
df.index.name = '学生编号'
④保存文件
# 保存为Excel文件
excel_file = '学生成绩表.xlsx'
df.to_excel(excel_file)
⑤设置保存的内容在表中显示的时候带上实线
# 加载工作簿
wb = load_workbook(excel_file)
ws = wb.active
# 定义加粗的边框样式
thick_border = Border(left=Side(style='medium'),
right=Side(style='medium'),
top=Side(style='medium'),
bottom=Side(style='medium'))
# 为所有单元格添加加粗的边框
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
for cell in row:
cell.border = thick_border
# 保存修改后的工作簿
wb.save(excel_file)
(2)读取excel内容并输出前5条数据:
代码:
import pandas as pd #导入pandas 模块
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
# 输出前5条记录
print(df.head())
如果出现无法对齐的情况:则加上:
pd.set_option("display.unicode.east_asian_width", True)
如果还是没有办法对齐,可以看我的博客:http://t.csdnimg.cn/3dSV5
使用Tabulate库来格式化输出:
import pandas as pd # 导入pandas 模块
from tabulate import tabulate
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
#pd.set_option('display.unicode.ambiguous_as_wide', True)
heads_content=["学生编号","语文","数学","英语","总成绩","成绩评定"]
table = tabulate(df.head(),headers=heads_content,tablefmt='plain', numalign="center")
# 输出前5条记录
print(table)
基本操作剖析:
①读取excel文件内容
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
②取出前五行数据
df.head()
③取出前n行数据
df.head(n)
④输出格式
table = tabulate(df.head(10),headers=heads_content,tablefmt='plain', numalign="center")
print(table)
见库tabulate的用法http://t.csdnimg.cn/1Z2Qs
⑤显示后n行
df.tail(n)
⑥查看表的基本信息
df.info()
⑦单独查看列名
print(df.columns)
⑧数据的选择与过滤(查找)
1.选择一行(获取第2行数据)
print(df.iloc[1])
-
-
2.选择多行(获取第2到4行数据)
-
print(df.iloc[1:4])
-
3.选择一列(第2列)
-
# 选择第一列,使用列的整数位置索引 print(df.iloc[:, 1])
-
4.选择多列(选择第2到4列)
-
print(df.iloc[:,1:4])
-
5.行列结合获得具体值(第1行第2列(第一个学生的语文成绩))
# 使用iloc second_row = df.iloc[0,1]
⑨数据的选择与过滤(增加)
1.在第i列后面增加一列(i=1为例)
核心代码:
# 创建一个新的列表,包含从1到100的整数
new_lst = list(range(1, 101))
# 将新列表插入到DataFrame的第二个位置作为新的一列,列名为“未命名学科”
df.insert(1, '未命名学科', new_lst)
总代码:
import pandas as pd # 导入pandas 模块
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
# 创建一个新的列表,包含从1到100的整数
new_lst = list(range(1, 101))
# 将新列表插入到DataFrame的第二个位置作为新的一列,列名为“未命名学科”
df.insert(1, '未命名学科', new_lst)
# 保存修改后的DataFrame到新的Excel文件
df.to_excel("学生成绩表.xlsx", index=False)
2.在第i行后面增加一行
直接在最后一行添加新数据(第101行添加数据):
核心代码:
df.loc[100]=["学生101",101,100,99,98,297,'A']
总代码:
import pandas as pd # 导入pandas 模块
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
df.loc[100]=["学生101",101,100,99,98,297,'A']
# 保存修改后的DataFrame到新的Excel文件
df.to_excel("学生成绩表.xlsx", index=False)
⑩数据的选择与过滤(修改)
1.修改内容
修改第101行数据的第6列为100000:
df.iloc[100,5]=100000
2.修改列名
核心代码:
new_array = ['学生编号', '线性代数', '语文', '数学', '英语', '总成绩', '评定等级']
col_mapping = dict(zip(array1, new_array))
# 使用rename方法修改列名
df.rename(columns=col_mapping, inplace=True)
总代码:
import pandas as pd
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
array1 = df.columns # 获取当前列名
print(array1)
# 创建一个包含旧列名和新列名的字典
new_array = ['学生编号', '线性代数', '语文', '数学', '英语', '总成绩', '评定等级']
col_mapping = dict(zip(array1, new_array))
# 使用rename方法修改列名
df.rename(columns=col_mapping, inplace=True)
# 保存修改后的DataFrame到新的Excel文件
df.to_excel("学生成绩表.xlsx", index=False)
⑪数据的选择与过滤(删除)
1.删除第i列
核心代码:
df.drop(columns='线性代数',axis=1,inplace=True)
完整代码:
import pandas as pd
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
df.drop(columns='线性代数',axis=1,inplace=True)
# 保存修改后的DataFrame到新的Excel文件
df.to_excel("学生成绩表.xlsx", index=False)
2.删除第i行
删除第1行数据:
核心代码:
df.drop(labels=0,axis=0,inplace=True)
完整代码:
import pandas as pd
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
df.drop(labels=0,axis=0,inplace=True)
# 保存修改后的DataFrame到新的Excel文件
df.to_excel("学生成绩表.xlsx", index=False)
3.按照指定条件删除
删除“语文”分数小于60分的所有人:
核心代码:
df.drop(df[(df['语文']<60)].index,inplace=True) # 删除语文分数小于60的行
完整代码:
import pandas as pd
# 读取excel 文件内容
df = pd.read_excel("学生成绩表.xlsx")
df.drop(df[(df['语文']<60)].index,inplace=True) # 删除语文分数小于60的行
# 保存修改后的DataFrame到新的Excel文件
df.to_excel("学生成绩表.xlsx", index=False)
2.删除第i列
⑫查看当前行数
print(len(df))
⑬数据的统计运算
1.求平均值
2.求总和
3.求最大值
4.求最小值
5.求标准差
代码:
print(df['语文'].mean()) # 平均值
print(df['语文'].sum() ) # 总和
print(df['语文'].max() ) # 最大值
print(df['语文'].min() ) # 最小值
print(df['语文'].std() ) # 标准差
⑭排序
1.按照语文分数正序排列(从小到大)
df.sort_values(by='语文', ascending=True, inplace=True)
2.按照语文分数逆序排列(从大到小)
df.sort_values(by='语文', ascending=False, inplace=True)
好啦,我会持续学习,持续更新,也希望我的总结能给大家带来帮助!