Re: [问题] 如何用Pyqt去搜寻excel内特定区块的数值

楼主: rayko0702 (吃饭 睡觉 打东东)   2023-02-01 14:58:38
openpyxl难用到爆...pandas简单易懂 一个forloop就写完了
你这问题核心应该是要修边 让每个人的表可以是任意n*m的大小
先假设当初写表的的人没有很认真排版
表任意排版如下
https://i.imgur.com/EgpTkS6.jpg
可以看到空行空列很随兴排
所以需要把取出来的各dataframe去边(去nan)
如下
https://i.imgur.com/ZbB06Qp.jpg
再把各个处理好的dataframe存到字典里面
=====================程式码&说明============================
import pandas as pd
import numpy as np
df = pd.read_excel(r"你的路径", header=None)
index_notna = list(df.loc[pd.notna(df[0])].index) #找出各学生开始的列成list
index_notna.append(len(df)) #等等跑循环最后一组的结束位置
students = {} #创一个空字典 里面每个key(学生名)会对到他的dataframe
for i in range(len(index_notna)-1): #跑循环历遍,学生数会是index的长度-1
student_name = df.loc[index_notna[i],0] #取出学生名
range_a = np.arange(index_notna[i],index_notna[i+1]) #设定找寻的上下边界
A = df.loc[range_a,1:] #A不取学生那行
A = A.dropna(how = 'all', axis = 0) #移除所有为值为nan的列
A = A.dropna(how = 'all', axis = 1) #移除所有为值为nan的行
row_names = list(A.iloc[:,0][A.iloc[:,0].notna()]) #列名list
col_names = liststudents[(A.iloc[0,:][A.iloc[0,:].notna()]) #行名list
A = A.reset_index(drop=True) #重置列的序号
A = A.T.reset_index(drop=True).T #重置行的序号
A = A.drop(index = 0, columns = 0) #移除第0行跟第0列
A.columns = col_names #重新标签
A.index = row_names #重新标签
students[student_name] = A #将处理好去边的表格放进字典里
namelist = list(students.keys()) #学生名单list
=============================================================================
后面找各学生的表呼叫students['学生的名子'] 就能叫出修饰好的表了
有比较聪明的写法再欢迎前辈指教...刚自学python一个月
很多指令还不熟 如果有比较聪明的指令可帮忙提点 谢谢
※ 引述《ninifs (快快乐乐过每天 !)》之铭言:
: 请教各位大大,
: 小弟刚学会一些基本的python和openpyxl操作,
: 也有时候也会用Pyqt写成一个小接口帮助自己工作效率,
: 目前遇到困难是工作上想实作以下操作,希望有高手帮忙指引一下!
: excel内的数据如最下面,
: 主要是有多个学员资料(至少100个,学员A,B,C,D......)
: 每个学员有一个区块的资料,
: 每一个区块的rows和columns数量不固定,
: (就是表格内的 "day"和"内容"数量不固定)
: 希望能用Pyqt的接口,做出三个下拉选单,
: 第一个下拉选单可以选 => 学员A,学员B,学员C...etc
: 第二个下拉选单可以选 => day1,day2,day3...etc
: 第三个下拉选单可以选 => 内容1,内容2,内容3...etc
: 这样就可以定位到某一个cell,然后回报数值
: 可是我第一步就卡住了,
: 若第一个下拉选单选了 "学员B",
: 我该怎么让程式在接下来的动作中,
: 只会去寻找"学员B"那个区块里面的东西 ?(因为那个区块的大小不固定...@@)
: 先谢谢各位大神了!
: ===========example=================
: 学员A
: 内容1 内容2 内容3
: day1 23 12 65
: day2 14 23 42
: day3 5 21 654
: day4 16 5 879
: day5 86 435 433
: 学员B
: 内容1 内容2 内容3 内容4 内容5
: day1 23 12 65 85 67
: day2 14 23 42 883 67
: day3 5 21 654 13 98
: 学员C
: 内容1 内容2
: day1 23 12
: day2 14 23
: day3 5 21
: day4 16 5
: day5 86 435
: day6 123 23
: day7 79 64
作者: nsay (心乱不已。停留着)   2023-02-01 18:59:00
(笔记
作者: ninifs (快快乐乐过每天 !)   2023-02-11 21:34:00
谢谢大大的教学非常感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com