在Python中,有一种从其他列表创建列表的方式,称为列表推导。例如:
上图7中的代码从列表x直接生成列表y,而列表y中的数值是列表x中对应值的平方。下面的代码使用了range()函数,得到同样的结果:
也可以是集,例如:
还可以添加if语句:
上图10中的代码将序列中4的倍数平方,得到新序列。
甚至可以嵌套for语句:
Python 推导式实用实列:
import pandas as pd
from pathlib import Path
import openpyxl
#%% 普通多文件汇总 - for
files = Path('案例 1').glob('*.xlsx')
dfs = []
for f in files:
dfs.append(pd.read_excel(f))
df = pd.concat(dfs)
df
#%% 普通多文件汇总 - 推导式
files = Path('案例 1').glob('*.xlsx')
dfs = [
pd.read_excel(f)
for f in files
]
df = pd.concat(dfs)
#%%
cols = '姓名 性别 部门 销售额'.split()
dfs = (
pd.read_excel(n,header=None)
for n in Path('案例 1').glob('*.xlsx')
)
dfs = [reset_header(df,cols) for df in dfs]
df = pd.concat(dfs)
df
#%%
这时候可能就需要用 py 的遍历,比如
前缀是 text_ 的列
cols = [c for c in df.columns if c.startwith('text_')]
df[cols].astype(str)
f_range=range(1,nums)
s_range=range(1,31)
vs=((f,s) for finf_range for s ins_range)
res=pd.DataFrame.from_records(itertools.islice(vs,nums),columns=['考场号','座位号'])
strcols_func = {
c : 'first'
for c in x_df.columns 匹配查找里的
if is_string_dtype(x_df[c]) and c not in keys
new_values={ 替换查找里的
c:f'问题'
for c in df.columns
def ap_to_excel(x_df):
x_df.to_excel(f'.xlsx')
df.groupby('班级').apply(ap_to_excel) groupby()有多少个相同的班级就分多少个表,这也是一个遍历。
apply(ap_to_excel)某个班在总表里有多少条记录,撤分后的表就有多少个记录,这也一种遍历
df = pd.read_excel('titanic_full.xlsx')
def each_船舱等级(xdf, wb):
grade = xdf.name
xdf.to_excel(wb, f'船舱等级()')
def each_性别(xdf, wb):
sex = xdf.name
with pd.ExcelWriter(f"()需求3(pd).xlsx") as ew:
xdf.groupby('船舱等级').apply(each_船舱等级, ew)
df.groupby(["性别"]).apply(each_性别, ew)
这个代码也含有非常丰富的遍历含义
编辑:渡江云
领取专属 10元无门槛券
私享最新 技术干货