我正在尝试使用str.find()
并且它不断出现错误,我在做什么错了?
我有一个矩阵,其中第一列是数字,第二列是分配给那些字母的缩写。缩写是ED,LI或NA,我试图找到与这些字母相对应的位置,以便我可以绘制一个散点图,该散点图用颜色编码以匹配这三个组。
mat=sio.loadmat('PBMC_extract.mat') #loading the data file into python
data=mat['spectra']
data_name=mat['name'] #calling in varibale
data_name = pd.DataFrame(data_name) #converting intoa readable matrix
pca=PCA(n_components=20) # preforms pca on data with 20 components
pca.fit(data) #fits to data set
datatrans=pca.transform(data) #transforms data using PCA
# plotting the graph that accounts for majority of data and noise
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('Number of components')
plt.ylabel('Cumulative explained variance')
fig = plt.figure()
ax1 = Axes3D(fig)
#str.find to find individual positions of anticoagulants
str.find(data_name,'ED')
#renaming data for easiness
x_data=datatrans[0:35,0]
y_data=datatrans[0:35,1]
z_data=datatrans[0:35,2]
x2_data=datatrans[36:82,0]
y2_data=datatrans[36:82,1]
z2_data=datatrans[36:82,2]
x3_data=datatrans[83:97,0]
y3_data=datatrans[83:97,1]
z3_data=datatrans[83:97,2]
# scatter plot of score of PC1,2,3
ax1.scatter(x_data, y_data, z_data,c='b', marker="^")
ax1.scatter(x2_data, y2_data, z2_data,c='r', marker="o")
ax1.scatter(x3_data, y3_data, z3_data,c='g', marker="s")
ax1.set_xlabel('PC 1')
ax1.set_ylabel('PC 2')
ax1.set_zlabel('PC 3')
plt.show()
不断出现的错误如下;
File "/Users/emma/Desktop/Final year project /working example of colouring data", line 49, in <module>
str.find(data_name,'ED')
TypeError: descriptor 'find' requires a 'str' object but received a 'DataFrame'
答案 0 :(得分:2)
该错误是因为find
方法期望使用str
对象而不是DataFrame
对象。正如PiRK所提到的,问题是您要在此处替换data_name
变量:
data_name = pd.DataFrame(data_name)
我认为应该是:
data = pd.DataFrame(data_name)
此外,尽管str.find(data_name,'ED')
可行,建议的方法是仅传递这样的搜索字词:
data_name.find('ED')
答案 1 :(得分:0)
正确的语法是
data_name.find('ED')
在这里查看示例
https://www.programiz.com/python-programming/methods/string/find
编辑1 虽然我只是注意到data_name是熊猫DataFrame,所以这行不通吗?您到底想做什么?
您断开的函数调用甚至没有返回到变量?因此,很难回答您的问题吗?