利⽤Python对Excel数据进⾏处理通过本⽂,记录分享我利⽤Python对已存在的excel表格进⾏数据处理。
1.1加载⽂件夹内所有的Excel数据;
1.2 ⽣产贡献度分析图表(以柱状图显⽰表格数据);
1.3提起Excel表格中指定列数据;
1.4定向筛选所需数据;
1.5多表数据统计排⾏;
1.6多表数据合并新excel⽂件。
2. 系统开发必备
2.1 系统开发环境
本系统的软件开发及运⾏环境具体如下:
操作系统:Windows7、Windows10;
Python版本:Python3.9
开发⼯具:Pycharm
2.2 ⽂件夹组织结构
3.导库
import xlrd2 #xlrd: 对Excel进⾏读相关操作
import xlwt #xlwt: 对Excel进⾏写相关操作,且只能创建⼀个全新的Excel然后进⾏写⼊和保存。
import numpy
import matplotlib
from prettytable import PrettyTable  #PrettyTable 是python中的⼀个第三⽅库,可⽤来⽣成美观的ASCII格式的表格
from matplotlib import pyplot as plt
4. 主函数设计
Excel数据分析师的主函数main(),主要⽤于实现系统的主界⾯。在主函数main()中,⾸先调⽤get_files_name()函数获取⽂件名。get_files_name()函数代码如下:
#导⼊⽂件
def get_files_name():
"""
⽤于获取⽂件名
:return: 返回值为⽂件名组成的列表
"""
file_list = os.listdir('./data')
return file_list
然后调⽤load_data()函数来读取excel⽂件并字典⽅式保存。
#保存⽣产excel表
def load_data(file_list):
"""
⽤于读取指定的⽂件并保存⾄字典数据结构中
:
param file_list: 需要加载的⽂件列表
:return: 保存了⽂件内容的字典
"""
dictory = {}
for file in file_list:
# 获取表格⽂件
book = xlrd2.open_workbook('./data/'+file)
# 获取表格中的所有sheet
names = book.sheet_names()
# 获取第⼀个sheet
sheet = book.sheet_by_index(0)
# 获取当前表格的⾏数
rows = ws
# 获取当前表格的列数
cols = ls
# 获取表头⽂件,即表格第⼀⾏
head = w_values(0)
for row in range(rows-1):
# 如果当前字典中没有该城市则创建⼀个
if ll_value(row+1, 0) in dictory.keys():
ll_value(row+1, 0)] = {}
for col in range(cols-1):
ll_value(row+1, 0)][head[col+1]] = ll_value(row+1, col+1))
return dictory
接着调⽤menu()函数⽣成功能选择菜单。
menu()函数代码如下:
def menu():
print("  ----------Excel 数据分析师----------")
print("{:<30}".format("  ==============功能菜单============== "))
print("{:<30}".format("  1. 显⽰当前数据                    "))
print("{:<30}".format("  2. 以柱状图展⽰当前数据              "))
print("{:<30}".format("  3. 提起指定列                      "))
print("{:<30}".format("  4. 定向筛选指定元素                      "))
print("{:<30}".format("  5. 数据排⾏                        "))
print("{:<30}".format("  6. 重新加载数据                      "))
print("{:<30}".format("  7. 保存当前数据                      "))
print("{:<30}".format("  0. 退出程序                          "))
print("{:<30}".format(" ==================================== "))
print("{:<30}".format(" 说明:输⼊相应数字后按下回车选择指定功能 "))
print('\n')
并且应⽤if语句控制各个⼦函数的调⽤,从⽽实现对Excel⽂件的选择,Excel数据的加载,选择、筛选、合并、排序和统计等功能。主函数完整代码如下:
if __name__ == "__main__":
# 导⼊⽂件
files = get_files_name()
data = {}
print("当前data⽂件夹下的⽂件如下:")
num = 1
for file in files:
print(num, file)
num += 1
while(1):
index_str = input("请选择需要导⼊的⽂件序号(多个⽂件导⼊时⽤空格分开,输⼊0则导⼊所有⽂件,输⼊多⽂件则⾃动合并):")
index_list = index_str.split(' ')
try:
ve('')
except:
pass
choice_file_list = []
if index_list[0] == '0':
choice_file_list = files
break
else:
try:
for item in index_list:
choice_file_list.append(files[int(item)-1])
except:
print("输⼊序号有误")
continue
if choice_file_list:
break
else:
print("输⼊序号有误")
data = load_data(choice_file_list)
print("导⼊数据成功\n")
# 调⽤函数,打印菜单
menu()
while 1:
choice = input("请选择指定功能:")
if choice == '0':
print("\n退出程序\n")
exit()
elif choice == '1':
print("当前功能:显⽰当前数据")
show_data(data)
input('\n按下回车返回菜单')
menu()
elif choice == '2':
print("当前功能:以柱状图显⽰数据")
draw_plot(data)
input('\n按下回车返回菜单')
menu()
elif choice == '3':
print("当前功能:筛选指定列")
keys = list(data[list(data.keys())[0]].keys())
print("当前表格中的列如下:")
num = 1
for key in keys:
print(num, key)
num += 1
choice_col_list = []
while (1):
index_str = input("请选择需要筛选出的列序号(多列之间⽤空格分开,0代表所有列):")                index_list = index_str.split(' ')
try:
ve('')
except:
pass
choice_file_list = []
if index_list[0] == '0':
choice_col_list = keys
break
else:
try:
for item in index_list:
choice_col_list.append(keys[int(item) - 1])
except:
print("输⼊序号有误")
continue
if choice_col_list:
break
else:
print("输⼊序号有误")
data = get_specified_cols(data, choice_col_list)
print("筛选成功")
input('\n按下回车返回菜单')
menu()
elif choice == '4':
print("当前功能:筛选指定⾏")
keys = list(data[list(data.keys())[0]].keys())
print("当前表格中的列如下:")
num = 1
print(num, "城市")
num += 1
for key in keys:
print(num, key)
num += 1
col = int(input("请输⼊需要进⾏筛选的数据所在的列:"))-2
if col == -1:
col = '城市'
else:
col = keys[col]
op_list = ['<', '<=', '=', '>=', '>']
print("⽐较操作符如下:")
num = 1
for op in op_list:
print(num, op)
num += 1
operation = int(input("请输⼊⽐较操作符前的序号:"))-1
operation = op_list[operation]
value = input("请输⼊需要筛选的值:")
data = get_specified_data(data, operation, col, value)
print("筛选成功")
input('\n按下回车返回菜单')
menu()
elif choice == '5':python怎么读取excel文件数据
print("当前功能:数据排序")
keys = list(data[list(data.keys())[0]].keys())
print("当前表格中的列如下:")
num = 1
for key in keys:
print(num, key) #显⽰当前表格中的所有的列
num += 1
col = int(input("请输⼊需要进⾏排序的数据所在的列:")) - 1
col = keys[col]
reverse = input("排序⽅式:\n1 从⼤到⼩排序\n2 从⼩到⼤排序\n")
if reverse == '1':
data = sort_data(data, col, True)
elif reverse == '2':
data = sort_data(data, col, False)
else:
print("输⼊有误")
input('\n按下回车返回菜单')
menu()
elif choice == '6':
# 导⼊⽂件
files = get_files_name()
data = {}
print("当前⽂件夹下的⽂件如下:")
num = 1
for file in files:
print(num, file)
num += 1
while (1):
index_str = input("请选择需要导⼊的⽂件序号(多个⽂件导⼊时⽤空格分开,输⼊0则导⼊所有⽂件,输⼊多⽂件则⾃动合并):")                index_list = index_str.split(' ')
try:
ve('')
except:
pass
choice_file_list = []
if index_list[0] == '0':
choice_file_list = files
break
else:
try:
for item in index_list:
choice_file_list.append(files[int(item) - 1])
except:
print("输⼊序号有误")
continue
if choice_file_list:
break
else:
print("输⼊序号有误")
data = load_data(choice_file_list)
print("导⼊数据成功\n")
# 打印菜单
menu()
elif choice == '7':
print("当前功能:保存数据")
save(data)
input('\n按下回车返回菜单')
menu()
else:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。