我已经编写了一个函数来转换excel表格,并且只从每月的数据中提取一行。因此,我将把数据放在一个新的excel表中。我做了这个:
def bocapago(nombre):
path='/content/drive/MyDrive/Fundacion Frontera Economica/Muni/python/inputs/BOCAS DE PAGO'
filename = path + "/" + nombre.upper() + '.xlsx'
input_cols=[0,1,2,3] # Columnas a importar
df = pd.read_excel(filename,
header=0,
usecols = input_cols,
index_col=False,
)
df.columns = ['n_tasa','Fecha','Lugar','Importe']
pd.to_datetime(df['Fecha'])
df['Periodo'] = pd.DatetimeIndex(df['Fecha']).month
df['Periodo'] = nombre
df['Periodo'] = df['Periodo'].str[:3] + "-" + df['Periodo'].str[-4:]
df = pd.pivot_table(df, values='Importe', index='Periodo', columns='Lugar', aggfunc='sum')
df = df.assign(Total=df.sum(1))
df = df.rename(columns={'Total':'TOTAL GENERAL'})
df.head()
return df 这就是读取处理表单的函数。然后我做了这个作为第二步:
ENERO1 = bocapago('ENERO2021')
FEBRERO1 = bocapago('FEBRERO2021')
MARZO1 = bocapago('MARZO2021')
MAYO1 = bocapago('MAYO2021')
ingxboca = [ENERO1, FEBRERO1, MARZO1, MAYO1]
ingxboca = pd.concat(ingxboca)
ingxboca = ingxboca.merge(ingresos['TOTAL IACM'], how='left', on='Periodo')
ingxboca['DIFERENCIA'] = ingxboca['TOTAL IACM']-ingxboca['TOTAL GENERAL']
ingxboca.head()在本例中,我使用了另一个名为"ingresos“的数据帧来进行合并。我的疑问是,我如何才能做一个for或while bucle来做第二步,这样我就可以把它全部包含在名为"bocapago“的函数中,或者创建另一个像"finishing”这样的函数。
发布于 2021-08-04 16:11:26
我会保留bocapago作为它自己的函数,就像你做的那样,并让第二个函数调用它。它降低了单个函数的复杂性,并将更容易在未来的代码重用。如果我没理解错你的问题,这行得通吗?
def new_function(file_list:list):
ingxboca = pd.concat([bocapago(f) for f in file_list])
ingxboca = ingxboca.merge(ingresos['TOTAL IACM'], how='left', on='Periodo')
ingxboca['DIFERENCIA'] = ingxboca['TOTAL IACM']-ingxboca['TOTAL GENERAL']
return ingxboca.head()我不确定这是否回答了问题。如果是这样的话,我想第一行中的列表理解就是这么做的。请记住,您可以将if语句添加到列表理解中。您还可以传入一个字符串,并使用类似glob的内容为您提供一个包含规则的文件列表。
发布于 2021-08-04 19:56:48
谢谢@m25。我试着这样说:
def tabla(file_list:list):
ingxboca = pd.concat([bocapago(f) for f in file_list])
ingxboca = ingxboca.merge(ingresos['TOTAL IACM'], how='left', on='Periodo')
ingxboca['DIFERENCIA'] = ingxboca['TOTAL IACM']-ingxboca['TOTAL GENERAL']
return ingxboca.head()然后运行以下命令:
file_list = [bocapago('ENERO2021'), bocapago('FEBRERO2021'), bocapago('MARZO2021')]
tabla(file_list)但我有一个较高的错误。我认为你提出的建议是正确的,但我不知道如何操作它。是的,我更喜欢定义第二个函数来运行第二步
https://stackoverflow.com/questions/68653942
复制相似问题