python如何选取excel文件满足特定条件的行
作者:人间真正走过~
python选取excel文件满足特定条件的行
使用iloc
df = pd.read_excel('data.xlsx',engine='openpyxl') x=df.iloc[df.iloc[:, 1].values==i, 6].values #第二列值等于i的所有行的第六列
python:openpyxl取某一行、某一列、应用excel函数
取某一行
首先,我们快速创建一个表格:
from openpyxl import Workbook from openpyxl import load_workbook wb = Workbook() # pay attention to the first letter sheet_2 = wb.create_sheet('sheet_2') for i in range(1, 20): for j in range(1, 20): sheet_2.cell(i, j, value=j*i)
数据够多了。
这时,我们需要了解到,行和列是怎么构成的。
下面插播一条手动输入数据的代码(和其它内容无关,只是用来区别行和列的不同)
rows = ( (998, 997, 996), (787, 988, 876), (233, 445, 786) ) for row in rows: sheet.append(row)
根据自己输入数据创建excel表格可知,每一行都是一个元组,每一列则不是元组(他是个generator)。
这个认知非常重要!!
所以在取全部行的时候,很简单,我们只需要遍历一遍表格,得到单个元组,再遍历一遍元组,得到单个对象,并获取它的值。
这个非常简单,两次迭代即可搞定,就不放代码la。
可以选择直接print,也可以创建列表,放在列表里。
如果想要列表好看,就创建两个列表,组成一个二位列表……(就有点类似于dataframe拉嘿嘿串台了)。
我要输出某一行的值:
for i in sheet_2[5]: print(i.value, end='\t') print() ''' 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 '''
注意:这里,我输入的是5,他输出的是第五行。
和python中index的取值不同,这里输入0,会报错。因为行列都是从1开始的。
取某一列
行,是一个元组,输出很方便,那么列怎么办呢?
如果上述代码,会直接报错。
我们可以先尝试输出全部的“列”:
list1 = [] for col1 in sheet_2.columns: list_1 = [] for col_1 in col1: list_1.append(col_1.value) list1.append(list_1) print(list1) print(list1[0])
list1是二维列表,list_1是二维列表中的一维列表。
如果想要输出某一行,可以直接利用index。
但是这样很麻烦,数据太多的话,就很慢,能不能只单纯的输出一列?
能。
sheet_2_col = tuple(sheet_2.columns) for i in range(0, 4): for j in sheet_2_col[i]: print(j.coordinate, j.value, end="\t") print()
以上我取的是1~4列,即:A-D列,输出的是其标号+值。但为什么我写了0?刚刚不是说,没有0吗?
因为我把“列”变成了元组。
元组可以有0。
其实这个方法在处理多数据的时候还是有弊端,我们看看下一个方法。
for i in sheet_2.rows: for j in i: if 'A' in j.coordinate: print(j.coordinate, j.value, end='\t') print()
这里只输出了A列。
依然需要遍历一遍才行。
应用excel里的函数
for i in range(1, 20): sheet_2[f"T{i}"] = f'=AVERAGE(A{i}:S{i})' sheet_2[f"U{i}"] = f'=SUM(A{i}:S{i})' sheet_2['V1'] = 'AVERAGE' sheet_2['W1'] = 'Sum' for i in range(2, 20): sheet_2[f"V{i}"] = f'=AVERAGE(B{i}:S{i})' sheet_2[f"W{i}"] = f'=SUM(B{i}:S{i})'
上面有很多小细节需要注意,{i}用来占位,f就是excel里面那个f,注意,引号在等号前面!
如果列表头要添加文字
很简单拉,直接修改单元格内容,并注意公式容纳数据的范围即可。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。