“无法强制到系列,长度必须为 1:给定 11”错误在 Python 中是啥意思?

Posted

技术标签:

【中文标题】“无法强制到系列,长度必须为 1:给定 11”错误在 Python 中是啥意思?【英文标题】:What does "Unable to coerce to Series, length must be 1: given 11" error mean in Python?“无法强制到系列,长度必须为 1:给定 11”错误在 Python 中是什么意思? 【发布时间】:2022-01-24 01:55:14 【问题描述】:

我试图将物体(准确地说是光学叉)的下落绘制为时间的函数,以验证万有引力定律确实是 9.81。 不同的数据应该代表每个插槽的通道。不同的狭缝相距1厘米,共有11条狭缝。我使用 Arduino 设置测量了这些数据,并绘制了图形并与 Python 匹配。我将数据保存在 CSV 文件中,但是当我运行代码时,出现错误“无法强制转换为系列,长度必须为 1:给定 11”。但是,当我手动输入值而不是读取文件时,代码可以工作,我得到了这个图表,这是我所期望的。

这是我使用的指令(我通过手动输入在每次迭代中添加了值,我认为通过在我的 CSV 文件中执行相同的操作,代码会起作用,但不幸的是它也不起作用)

t = 1e-3 * np.array([3.524,7.06,10.608,14.17,17.744,21.326,24.918,28.518,32.128,35.746,39.372])

而不是

t = pd.read_csv("Fall.csv")   # Opening the data file

你知道错误可能来自哪里吗?我的意思是为什么当我手动输入值时代码可以工作,但当我尝试读取具有完全相同值的文件时却不行?我指定我的 CSV 文件中有 11 个数据。

这是我的初始 CSV 文件(即没有在每次迭代中添加值),名称为“Fall.csv”:

| 3.524 |
| 3.536 |
| 3.548 |
| 3.562 |
| 3.574 |
| 3.582 |
| 3.592 |
| 3.6   |
| 3.61  |
| 3.618 |
| 3.626 |

这是我的完整代码:

import numpy as np                    # For the calculation
import pandas as pd                   # To read files
import matplotlib.pyplot as plt       # To draw curves
import scipy.optimize as opt          # For the adjustment

# Raw data
t = pd.read_csv("Fall.csv")   # Opening the data file
z = -0.01 * np.linspace(1, 11, 11)

# Definition of the free fall function
g = 9.81                     # the acceleration of gravity

def f(t,t0,h0):        # Definition of the fitting function
    return -0.5*g*(t-t0)**2 + h0

# Data adjustment
init_param = [0 , 0]          # Initial values t0=0, h0=0
final_param , var = opt.curve_fit(f,t,z)

# Optimal function
tt = np.linspace(final_param[0], 100e-3,100)
hh = f(tt, *final_param) # Reconstruction of the fitted curve

# Plot of analyzed data
plt.clf()                           # Plot of data and fit
plt.xlabel("Time (s)")
plt.ylabel("Height (m)")
legend = "t0 = %f ms, h0 = %f centimeter " % (final_param[0]*1000,final_param[1]*100)
plt.plot(tt,hh,"r--",label=legend)     # The adjustment
plt.plot(t,z,"bo", label="Data")     # The data
plt.legend()

【问题讨论】:

重塑数据是什么意思? 请provide code and data as text, not images @SibtainReza 那么这就是你首先应该说的,因为这里的问题是 OP 应该通过t[0] 他们将t 传递给op.curve_fit - 说你只是让它按原样工作,而您做了其他事情来避免 OP 提到的问题是无益的,并且可能会使其他人拒绝回答。不要。 【参考方案1】:

您的问题来自t 的形状。 Scipy curve_fitdocumentation 指定,在您的情况下,xdata应该是一个序列,即一维数组(或多或少)。

但是,由于您的 csv 有一个逐行的值,pd.read_csv() 将其读取为 DataFrame,它基本上是一个二维数组。

你可以通过打印t.shape来检查它,它输出(11,1),而z.shape(11,)

这个问题有多种解决方案,要么在一行上重写你的 csv,要么用t[0] 调用opt_curve 以仅选择t 的第一列。这里要小心,0 是 DataFrame 的第一列也是唯一一列的名称,而不是索引。这会给:final_param, var = opt.curve_fit(f, t[0], z)

我建议第一个解决方案,在读取数据时直接获得所需的形状。

【讨论】:

感谢您的解释。我已经尝试过第一个解决方案,但它返回的错误消息与我发布的相同。至于第二种解决方案,我得到一个“KeyError:0”错误。 这意味着您的数据框没有相同的列名。尝试打印 t.columns 并查看列的名称是什么,应该替换 0 !

以上是关于“无法强制到系列,长度必须为 1:给定 11”错误在 Python 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误

Informix 错误:发生了语法错误。错误代码:-201

我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”

错误精灵错误跟踪器错误

网页打开显示错误500是啥意思

PHP错误处理