如何在Python中的数据数组上执行我的函数?
问题描述:
在MATLAB中,如果我编写自己的函数,我可以将数组传递给该函数,并自动处理它。我试图在Python中使用另一种数据科学语言来做同样的事情,而不是处理它。如何在Python中的数据数组上执行我的函数?
有没有一种简单的方法来做到这一点,而不必每次我都想在数组的所有值上操作循环?这是更多的工作!看起来,用Python工作的伟大思想家之前会有这样的需求。
我试着将数据类型切换为list()
,因为这是可迭代的,但似乎并不奏效。我仍然收到一个基本上说不需要数组对象的错误。
这里是我的代码:
import scipy
from collections import deque
import numpy as np
import os
from datetime import date, timedelta
def GetExcelData(filename,rowNum,titleCol):
csv = np.genfromtxt(filename, delimiter= ",")
Dates = deque(csv[rowNum,:])
if titleCol == True:
Dates.popleft()
return list(Dates)
def from_excel_ordinal(ordinal, _epoch=date(1900, 1, 1)):
if ordinal > 59: #the function stops working here when I pass my array
ordinal -= 1 # Excel leap year bug, 1900 is not a leap year!
return _epoch + timedelta(days=ordinal - 1) # epoch is day 1
os.chdir("C:/Users/blahblahblah")
filename = "SamplePandL.csv"
Dates = GetExcelData(filename,1,1)
Dates = from_excel_ordinal(Dates) #this is the call with an issue
print(Dates)
答
那么你可以使用地图函数,该函数。
Dates = from_excel_ordinal(Dates)
替换从上面一行代码用下面的代码
Dates = list(map(from_excel_ordinal,Dates))
在上面的代码中,存在于每个日期值,函数from_excel_ordinal将被调用。最后它被转换成列表并存储到日期中。
+0
太棒了,它的工作!谢谢。 – turbonate
我想你可能正在寻找的魔法是在numpy。例如,你可以这样做,如果语句与numpy.where。 –
如果您的列表是一维的,也许您可以尝试诸如map(from_excel_ordinal,Dates)之类的东西。它会将这个函数应用于每个元素。 – Tristan
你可以使用地图或lambda来做同样的事情,因为地图只是使用像日期=列表(地图(from_excel_ordinal,日期)) –