Python 创建数据帧时出错“***”ValueError:如果使用所有标量值,则必须传递一个索引";
我试图用seaborn创作一个情节,但我遇到了一个错误:Python 创建数据帧时出错“***”ValueError:如果使用所有标量值,则必须传递一个索引";,python,pandas,dataframe,Python,Pandas,Dataframe,我试图用seaborn创作一个情节,但我遇到了一个错误: *** ValueError: If using all scalar values, you must pass an index 在我的程序中,我从XFOIL读取了一个输出文件,并试图绘制其结果以进行检查 XFOIL文件格式: # x Cp 1.00000 0.24276 0.99818 0.23883 0.99591 0.22657 0.99
*** ValueError: If using all scalar values, you must pass an index
在我的程序中,我从XFOIL读取了一个输出文件,并试图绘制其结果以进行检查
XFOIL文件格式:
# x Cp
1.00000 0.24276
0.99818 0.23883
0.99591 0.22657
0.99342 0.21421
0.99066 0.20128
0.98759 0.18802
0.98413 0.17434
0.98020 0.16018
0.97569 0.14544
0.97044 0.12999
0.96429 0.11374
0.95703 0.09661
### **(the file is big, and I will not transcript it completely here)** ###
我决定创建一个数据框,以便轻松地进行绘图过程
lst = fl.readlines()
lst_splt = [ s.replace('#','').split() for s in lst]
cp = pd.DataFrame.from_records(lst_splt[1:], columns=lst_splt[:1]).astype(float)
最后我试着用seaborn来描绘它:
sns.lineplot(x='x',y='Cp', data=cp)
但正如我在问题开头所说,出现了一个错误:
*** ValueError: If using all scalar values, you must pass an index
如何修复此错误?不确定为什么会出现此错误,但您可以简单地执行以下操作:
导入matplotlib.pyplot作为plt
plt.绘图(cp[“x”],cp[“cp”])
plt.show()
编辑:经过一些实验后,您创建数据帧的方法似乎是罪魁祸首。您可以将其替换为:
cp=pd.read\u csv(文件名,sep=“\s+”,skiprows=2,name=[“x”,“cp”])
#确保skiprows的值正确(应忽略标题,仅此而已)
#那么这就行了:
sns.lineplot(x=“x”,y=“Cp”,data=Cp)
不确定为什么会出现此错误,但您可以简单地执行以下操作:
导入matplotlib.pyplot作为plt
plt.绘图(cp[“x”],cp[“cp”])
plt.show()
编辑:经过一些实验后,您创建数据帧的方法似乎是罪魁祸首。您可以将其替换为:
cp=pd.read\u csv(文件名,sep=“\s+”,skiprows=2,name=[“x”,“cp”])
#确保skiprows的值正确(应忽略标题,仅此而已)
#那么这就行了:
sns.lineplot(x=“x”,y=“Cp”,data=Cp)
问题与传递给DataFrame
构造函数的columns
参数有关
打印lst\u splt[:1]
时,这是传递给列
参数的值,我得到以下结果:
print(lst_splt[:1])
# [['x', 'Cp']]
在本例中,Dataframe
构造函数需要一个平面列表,而不是嵌套列表。当您将lst\u splt[:1]
更改为lst\u splt[:1][0]
时,问题就解决了,打印时当然会给出:
print(lst_splt[:1][0])
# ['x', 'Cp']
下面代码的修改版本工作正常:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
fl = open('data.txt', 'r')
lst = fl.readlines()
lst_splt = [ s.replace('#','').split() for s in lst]
cp = pd.DataFrame.from_records(lst_splt[1:], columns=lst_splt[:1][0]).astype(float)
sns.lineplot(data=cp, x='x',y='Cp')
plt.show()
输出:
问题与传递给
DataFrame
构造函数的columns
参数有关
打印lst\u splt[:1]
时,这是传递给列
参数的值,我得到以下结果:
print(lst_splt[:1])
# [['x', 'Cp']]
在本例中,Dataframe
构造函数需要一个平面列表,而不是嵌套列表。当您将lst\u splt[:1]
更改为lst\u splt[:1][0]
时,问题就解决了,打印时当然会给出:
print(lst_splt[:1][0])
# ['x', 'Cp']
下面代码的修改版本工作正常:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
fl = open('data.txt', 'r')
lst = fl.readlines()
lst_splt = [ s.replace('#','').split() for s in lst]
cp = pd.DataFrame.from_records(lst_splt[1:], columns=lst_splt[:1][0]).astype(float)
sns.lineplot(data=cp, x='x',y='Cp')
plt.show()
输出:
能否尝试将索引=[0]添加到参数数据框中。从_记录(数据,索引=[0])?我无法复制您的场景,但这在以前对我有效。您是否尝试检查数据帧是否与您期望的一样?是吗?您是否尝试检查(例如,通过阅读文档)Seaborn是否希望数据以这种方式排列?尝试复制和粘贴
时发生了什么情况?如果使用所有标量值,则必须传递一个索引?是否确定错误出现在sns.lineplot
上,而不是出现在外观异常的pd.DataFrame.from\u记录上。您能在数据帧创建之后打印出cp.head()
吗?使用cp=pd.read\u csv(flname,'r',sep='\s+',skiprows=(3),header=None,index=[0])
错误***类型错误:read\u csv()在读取cp时参数'sep'有多个值。我没有“t通过此修改成功访问了sns.lineplot
。您是否可以尝试将索引=[0]添加到参数数据框中。从_记录(数据,索引=[0])?我无法复制您的场景,但这在以前对我有效。您是否尝试检查数据帧是否与您期望的一样?是吗?您是否尝试检查(例如,通过阅读文档)Seaborn是否希望数据以这种方式排列?尝试复制和粘贴时发生了什么情况?如果使用所有标量值,则必须传递一个索引?是否确定错误出现在sns.lineplot
上,而不是出现在外观异常的pd.DataFrame.from\u记录上。您能在数据帧创建之后打印出cp.head()
吗?使用cp=pd.read\u csv(flname,'r',sep='\s+',skiprows=(3),header=None,index=[0])
错误***类型错误:read\u csv()在读取cp时参数'sep'有多个值。我没有“通过此修改,t成功访问了sns.lineplot
。我觉得这并没有回答OP的特定问题,即如何处理他的XFOIL文件格式。使用您介绍的第一种方法可以正常工作。我以前已经试过了。但我仍然对这个错误感到好奇。我用seaborn做了类似的尝试,但错误依然存在。是的,您是否尝试过用我在帖子中提到的函数pd.read\u csv
替换文件打开>读入数据帧?这应该适用于您的文件格式,并提供您想要的结果。在第二个过程中,我尝试了,它成功了!谢谢!删除“r”(第二个参数),它没有位置……在我看来,这并没有回答OP特定的问题,即处理他的XFOIL文件格式。使用您介绍的第一种方法可以正常工作。我以前已经试过了。但我仍然对这个错误感到好奇。我用seaborn做了类似的尝试,但错误依然存在。是的,您是否尝试过用我在帖子中提到的函数pd.read\u csv
替换文件打开>读入数据帧?这应该适用于您的文件格式,并提供您想要的结果。在第二个过程中,我尝试了,它成功了!谢谢!删除“r”(第二个参数),它没有位置…我喜欢你提出的方法!谢谢!它也会在其他一些问题上帮助我!我喜欢你的方法