在 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)']
我正在尝试绘制物体(准确地说是光叉)的下落随时间变化的曲线,以验证万有引力定律确实是 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)']