TypeError : list indices must be integers or slices, not str when trying to plot

TypeError : list indices must be integers or slices, not str when trying to plot

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn.decomposition import PCA
from sklearn.cluster import AgglomerativeClustering
from sklearn.preprocessing import StandardScaler,normalize
from sklearn.metrics import silhouette_score

newdf = pd.read_csv("D:\DATASETS/CC_GENERAL.csv")
x = newdf.drop('CUST_ID',axis = 1)
x.fillna(method = 'ffill',inplace = True)

scaler = StandardScaler()
x_scaled = scaler.fit_transform(x)

x_normalized = normalize(x_scaled)

#CONVERTING THE NUMPY ARRAY INTO A PANDAS DATAFRAME

x_normalized = pd.DataFrame(x_normalized)

#REDUCING THE DIMENTIONALITY OF THE DATA!

pca = PCA(n_components= 2)
x_principal = pca.fit_transform(x_normalized)
x_principal = pd.DataFrame(x_normalized)
x_principal = ['P1','P2']

ac2 = AgglomerativeClustering(n_clusters = 2)

plt.figure(figsize = (6,6))
plt.scatter(x_principal['P1'],x_principal['P2'])
c= ac2.fit_predict((x_principal),cmap = 'rainbow')
plt.show()

这是我的错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-61-56f631c43c3e> in <module>
      3 #visualizing the cluster
      4 plt.figure(figsize = (6,6))
----> 5 plt.scatter(x_principal['P1'],x_principal['P2'])
      6 c= ac2.fit_predict((x_principal),cmap = 'rainbow')
      7 plt.show()

TypeError: list indices must be integers or slices, not str

x_principal 是一个包含两个字符串 P1 和 P2 的列表。所以 x_principal['P1'] 是错误的。您不能使用元素本身索引列表元素。

如果您正在尝试更新 x_principal 的列名称,这更有可能,您应该使用 x_principal.columns = ['P1, 'P2'],现在您正在分配这些值,这会覆盖数据