TypeError: аргумент float() должен быть строкой или числом, а не ‘tuple’ Ошибка ValueError: установка элемента массива с последовательностью

#python-3.x

#python-3.x

Вопрос:

типы данных столбцов следующие:

 Unnamed: 0                   object
Shear stress (τ) in N/m2     object
Unnamed: 2                   object
Unnamed: 3                  float64
Kte                          object
Unnamed: 5                   object
Kre                          object
Unnamed: 7                   object
Kae                          object
Unnamed: 9                   object
Unnamed: 10                 float64
Ktc                          object
Unnamed: 12                  object
Krc                          object
Unnamed: 14                  object
Kac                          object
Unnamed: 16                  object
Unnamed: 17                 float64
wdz                         float64
Unnamed: 19                 float64
Unnamed: 20                 float64
Unnamed: 21                 float64
Unnamed: 22                 float64
Unnamed: 23                 float64
Unnamed: 24                 float64
Unnamed: 25                 float64
Unnamed: 26                 float64
dFx                         float64
Unnamed: 28                 float64
dFy                         float64
Unnamed: 30                 float64
dFz                         float64
Unnamed: 32                 float64
Fx_1                          int64
Fy_1                          int64
Fz_1                          int64
Fx_2                          int64
Fy_2                          int64
Fz_2                          int64
dtype: object 
  

Ниже приведен мой код:

 def integrand_x1(x, Kte_1, Ktc_1, Kae_1, Kac_1, Kre_1, Krc_1, Wdz):
    r = 0.0002
    f = 2/360*10**(-5)
    S = r   f*sin(x) - sqrt(r**2 - (f**2)*(cos(x))**2)
    
    dFa_1 = (Kac_1*S   Kae_1)*Wdz
    dFr_1 = (Krc_1*S   Kre_1)*Wdz
    dFt_1 = (Ktc_1*S   Kte_1)*Wdz
    
    return (cos(30*pi/180)*dFa_1   sin(30*pi/180)*cos(5.4*pi/180)*dFr_1 - sin(30*pi/180)*sin(5.4*pi/180)*dFt_1)/((cos(30*pi/180))**2   (sin(30*pi/180))**2*cos(2*5.4*pi/180))
def integrand_x2(x, Kte_2, Ktc_2, Kae_2, Kac_2, Kre_2, Krc_2, Wdz):
    r = 0.0002
    f = 2/360*10**(-5)
    S = r   f*sin(x) - sqrt(r**2 - (f**2)*(cos(x))**2)    

    dFa_2 = (Kac_2*S   Kae_2)*Wdz
    dFr_2 = (Krc_2*S   Kre_2)*Wdz
    dFt_2 = (Ktc_2*S   Kte_2)*Wdz
    
    return (cos(30*pi/180)*dFa_2   sin(30*pi/180)*cos(5.4*pi/180)*dFr_2 - sin(30*pi/180)*sin(5.4*pi/180)*dFt_2)/((cos(30*pi/180))**2   (sin(30*pi/180))**2*cos(2*5.4*pi/180))
Kte_1 = df.iloc[i,4]
Kte_2 = df.iloc[i,5]
Kre_1 = df.iloc[i,6]
Kre_2 = df.iloc[i,7]
Kae_1 = df.iloc[i,8]
Kae_2 = df.iloc[i,9]

Ktc_1 = df.iloc[i,11]
Ktc_2 = df.iloc[i,12]
Krc_1 = df.iloc[i,13]
Krc_2 = df.iloc[i,14]
Kac_1 = df.iloc[i,15]
Kac_2 = df.iloc[i,16]

t = (df.iloc[i,0])
Wdz = t/sin(31.19*pi/180)

df['Fx_1'] = 0
df['Fy_1'] = 0
df['Fz_1'] = 0
df['Fx_2'] = 0
df['Fy_2'] = 0
df['Fz_2'] = 0
for i in range(0,1999,1):
    df.Fx_1.iloc[i] = quad(integrand_x1, 95*pi/180, 0, args=(Kte_1, Ktc_1, Kae_1, Kac_1, Kre_1, Krc_1, Wdz))   quad(integrand_x1, 0, 15*pi/180, args=(Kte_1, Ktc_1, Kae_1, Kac_1, Kre_1, Krc_1, Wdz))
  

Ответ №1:

quad возвращает кортеж, и вы пытаетесь добавить два кортежа в последней строке.

Комментарии:

1. Я удалил второй четырехчленный термин, и он по-прежнему выдавал ту же ошибку

2. Не могли бы вы попробовать df.Fx_1.iloc[i], err = quad(.... ?

3. Эй, но весь столбец Fx_1 имеет то же значение. Этого не должно происходить, потому что Ktc_1, Kac_1 и т.д. Все меняются с помощью «i». Пожалуйста, помогите

4. Вы должны пересмотреть свою реализацию. Я не знаю, что вы точно вычисляете. Quad возвращает два числа. Первое — это значение интеграла, а второе — оценка абсолютной ошибки в значении интеграла. Изначально у вас есть quad(..) quad(…). Если quad(…) возвращает (1,2), quad(..) quad(…) объединяют два кортежа (1,2,1,2). Вы хотите доказуемо сделать 1 1 = 2

5. Нет, это не об этом добавлении. Я убрал второй термин. Проблема в «i». Во фрейме данных для разных значений «i» все столбцы имеют разные значения. Тем не менее, весь столбец после интеграции имеет то же значение.