Ich habe einen Fehler erhalten TypeError: Zip-Argument # 2 muss Iteration unterstützen.
data = libraries.pd.read_csv('a.csv',header=1, parse_dates=True)
datas = DataCleaning.DataCleaning(data)
datas.cleaning(media)
calDf = datas.getDatas()
array_x = libraries.np.int32(libraries.np.zeros(len(calDf)))
array_y = libraries.np.int32(libraries.np.zeros(len(calDf)))
if len(calDf) > 1:
for num in range(len(calDf)):
array_x[num] = calDf.iloc[num,0]
array_y[num] = calDf.iloc[num,1]
def nonlinear_fit(x,a,b):
return b * libraries.np.exp(x / (a+x))
prameter_initial = libraries.np.array([0,0])
try:
param, cov = libraries.curve_fit(nonlinear_fit, array_x, array_y, maxfev=5000)
except RuntimeError:
print("Error - curve_fit failed")
li_result = []
li_result = Zip(y, array_x, array_y)
Ich denke, der Teil von Zip(y, array_x, array_y)
ist falsch, weil die Argumente von Zip nicht vom Listentyp sind, schrieb ich
for i in y:
li_result = []
li_result = Zip(y, array_x[i], array_y[i])
aber ich habe einen fehler
li_result = Zip(y, array_x[i], array_y[i])
IndexError: only integers, slices (`:`), Ellipsis (`...`),
numpy.newaxis (`None`) and integer or boolean arrays are valid indices
Also kann ich nicht verstehen, wie ich das beheben kann. Was soll ich tun?
Es klingt, als hätten Sie drei Arrays itemNameList
, array_x
und array_y
Angenommen, sie haben alle dieselbe Form, können Sie einfach tun:
zipped = Zip(itemNameList,array_x,array_y)
li_result = list(zipped)
EDIT
Ihr Problem ist, dass array_x
und array_y
keine tatsächlichen numpy.array
-Objekte sind, sondern numpy.int32
(oder einige andere nicht-iterierbare) Objekte:
array_x = np.int32(np.zeros(None))
array_x.shape
# ()
array_x.__iter__
# AttributeError: 'numpy.int32' object has no attribute '__iter__'
Vielleicht verläuft ihre Initialisierung nicht wie erwartet, oder sie werden von Arrays irgendwo in Ihrem Code geändert?
So kann Zip
(oder list (zip in py3) mehrere Listen in eine Liste von Tupeln umwandeln:
In [76]: y = ['item1', 'item2','item3'] # list of strings
In [77]: xdata = [100,200,300] # list of numbers
In [78]: ydata = np.array([1000,2000,3000]) # equivalent array of numbers
In [79]: list(Zip(y,xdata,ydata))
Out[79]: [('item1', 100, 1000), ('item2', 200, 2000), ('item3', 300, 3000)]