在 Python 中读取 CSV 文件时出现 KeyError

KeyError while reading a CSV file in Python

我正在尝试绘制物体(准确地说是光叉)的下落随时间变化的曲线,以验证万有引力定律确实是 9.81。不同的数据应该代表每个插槽的通道。不同的狭缝间隔1厘米,总共有11条狭缝。我用 Arduino 设置测量了这些数据,并绘制了图表并用 Python 拟合。我在 CSV 文件中有数据,但是当我 运行 我的代码时,我得到一个

KeyError: 'T (s)'

我不明白,因为列 T (s) 存在于我的 DataFrame 中。

这是我的名为 'Test.csv' 的 CSV 文件(我指定我不想 select T 列的第一个和最后一个值(即 3.514 和 3.636)并且我不想'要读取距离列):

T (s) Distance (m)
3.514 0.000
3.524 0.010
3.536 0.020
3.548 0.030
3.562 0.040
3.574 0.050
3.582 0.060
3.592 0.070
3.6 0.080
3.61 0.090
3.618 0.100
3.626 0.110
3.636 0.120

这是我的代码:

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
data = pd.read_csv("Test.csv")   # Opening the data file
z = -0.01 * np.linspace(1, 11, 11)

x = data['T (s)']

x_util = np.array(x[3.524:3.626])   # extracts data between 3.524 and 3.626 s

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

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

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

# 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(x_util,z,"bo", label="Data")     # The data
plt.legend()

你知道这个错误可能来自哪里吗?

实际上看着 df.info 似乎分隔符,至少从列名来看,是一个分号。此外,列名称应为“Time (s)”。请尝试:

data=pd.read_csv("Test.csv",sep=";")
z = -0.01 * np.linspace(1, 11, 11)    
x = data['Time (s)']