pandas 函数不返回任何内容,并且在导入时不运行

r1zhe5dt  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(181)

这是杀了我,我已经花了几个小时试图调试这对我自己没有运气。基本上,我有一个function1.py,它使用Pandas拉入一些csv文件,根据我的规范将它们连接起来,并应该1)打印结果DF 2)将DF写入Excel。function1.py是它自己的模块,代码如下:

def getMerged(csv_files, output_name):

   import pandas as pd

   list_of_expiry_dfs = []

   for csvfile in csv_files:
       names = ['date', 'open', 'high', 'low', 'close', 'vol']             # this can also go outside the fn
       df = pd.read_csv(csvfile, sep=';', names=names)
       df = df.set_index('date')
       list_of_expiry_dfs.append(df)

   x = 1

   composite = list_of_expiry_dfs[0]
   for each in list_of_expiry_dfs:
       composite = composite.join(each, lsuffix=x-1, rsuffix=x, how='outer')
       x = x + 1

   yaxis =[]
   for expiry in csv_files:
       open = 'open (' + expiry[:6] + ")"
       high = 'high (' + expiry[:6] + ")"
       low = 'low (' + expiry[:6] + ")"
       close = 'close (' + expiry[:6] + ")"
       vol = 'vol (' + expiry[:6] + ")"
       yaxis.append(open)
       yaxis.append(high)
       yaxis.append(low)
       yaxis.append(close)
       yaxis.append(vol)
   composite.columns = yaxis

   print(composite)
   composite.to_excel(output_name, header=True)

'''
在www.example.com的底部function.py,我可以选择运行这个函数,通过提供一些参数如下:

csv_files = [
'BZ1219.csv',
'BZ0120.csv',
'BZ0220.csv',
'BZ0320.csv',
'BZ0420.csv'
]

getMerged(csv_files, output_name='test.xlsx')

当作为主可执行文件运行时,它工作得很好。但这不是我想做的。我发现了一大堆需要帮助的问题。
首先,我完全无法在函数之外返回“composite”。我有所有类型的解决方案,包括返回语句,全局变量,设置函数等于变量,以及设置属性。无论我做什么,我都不能在函数之外评估复合。
我真正想做的是能够function1.py从另一个文件导入www.example.com,并按我的意愿运行它。也称为function1.py,只包含代码块1(没有代码块2)。other.py看起来像这样:

csv_files = ['BZ1219.csv','BZ0120.csv','BZ0220.csv','BZ0320.csv','BZ0420.csv']
output_name = "test.xlsx"

from function1 import getMerged

getMerged(csv_files=csv_files, output_name=output_name)

这不会返回错误,但也不会执行任何操作。最接近的方法是将下面的代码添加到代码块1中。它确实......嗯,有些东西。但它将函数踢进了一个无限循环,最终会崩溃。

def getMerged(csv_files, output_name):
   ** insert the rest of first code block **
   output = getMerged(csv_files, output_name)

但是当我导入它的时候,它仍然没有给予我想要的行为。我确实对www.example.com做了一些其他的更改other.py,并且在某个时候我终于能够成功地导入function1.py。但它也遇到了同样的问题,即由于变量“output”而作为无限循环运行,直到它崩溃。我已经更改了代码很多次,我甚至不记得www.example.com的代码更改是什么other.py
救命啊!

u0njafvf

u0njafvf1#

您应该能够通过将composite设置为全局变量来实现这一点。它看起来像这样。因为它对你不起作用,我假设你没有在函数中调用全局变量-global composite
function1.py www.example.com

composite = []

def getMerged(csv_files, output_name):

   import pandas as pd

   global composite # I have a feeling you're missing this line.

   list_of_expiry_dfs = []

   for csvfile in csv_files:
       names = ['date', 'open', 'high', 'low', 'close', 'vol']             # this can also go outside the fn
       df = pd.read_csv(csvfile, sep=';', names=names)
       df = df.set_index('date')
       list_of_expiry_dfs.append(df)

   x = 1

   composite = list_of_expiry_dfs[0]
   for each in list_of_expiry_dfs:
       composite = composite.join(each, lsuffix=x-1, rsuffix=x, how='outer')
       x = x + 1

   yaxis =[]
   for expiry in csv_files:
       open = 'open (' + expiry[:6] + ")"
       high = 'high (' + expiry[:6] + ")"
       low = 'low (' + expiry[:6] + ")"
       close = 'close (' + expiry[:6] + ")"
       vol = 'vol (' + expiry[:6] + ")"
       yaxis.append(open)
       yaxis.append(high)
       yaxis.append(low)
       yaxis.append(close)
       yaxis.append(vol)
   composite.columns = yaxis

   print(composite)
   composite.to_excel(output_name, header=True)

在你的另一个py文件里,-

csv_files = ['BZ1219.csv','BZ0120.csv','BZ0220.csv','BZ0320.csv','BZ0420.csv']
output_name = "test.xlsx"

from function1 import get, composite # need to import global value

getMerged(csv_files=csv_files, output_name=output_name)
print(composite)

相关问题