保存在 Excel 错误 - 'list' 对象没有属性 'to_excel'
Save in Excel error - 'list' object has no attribute 'to_excel'
我试图将结果保存在 excel 中,但出现错误 - 'list' 对象没有属性 'to_excel'。
我没有问题 运行 除了最后一行(保存结果)之外的整个代码。
你能帮我找出错误吗?谢谢
from collections import Counter
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from scipy.spatial import distance
df1=pd.read_csv("Clus_readinFile.csv", index_col="Site_ID")
df1.head(5)
# Standardization (z-score)
scaler = StandardScaler()
df_std = scaler.fit_transform(df1)
df_std
centroids_All = []
for cluster in range(1,15):
kmeans = KMeans(n_jobs = -1, n_clusters = cluster, init='k-means++')
kmeans.fit(df_std)
counts = dict(Counter(kmeans.labels_))
counts = pd.DataFrame.from_dict(counts, orient='index', columns=['Stores'])
centroids_deno = pd.DataFrame(scaler.inverse_transform(kmeans.cluster_centers_),columns= df1.columns)
centroids_deno['Stores'] = counts['Stores']
centroids_All.append(centroids_deno)
centroids_All.to_excel("centroidsAllResult.xlsx")
to_excel()
函数定义在pandas对象下,可以被pandasDataFrame对象调用。但是,要调用 to_excel()
函数的对象 centroids_All
被定义为一个列表。尽管您将 pandas Dataframe 附加到列表 centroids_All
中,但它本身仍然不是 pandas DataFrame。因此错误。
您可以在循环中使用 Dataframe.append() 到 append/concatenate 生成的 DataFrame,而不是使用列表追加。然后使用生成的 DataFrame 对象调用 to_excel()
只需将代码 centroids_All = []
更改为:
centroids_All = pd.DataFrame()
这是为了创建一个空的 pandas DataFrame 而不是空列表。
追加 DataFrame 的代码只需要稍作改动(幸运的是,语法与追加列表的代码相似)。 ignore_index=True
被添加到 append() 调用中以重新序列化索引。结果代码是:
centroids_All = centroids_All.append(centroids_deno, ignore_index=True)
注意将附加结果重新分配回合并数据框。
我试图将结果保存在 excel 中,但出现错误 - 'list' 对象没有属性 'to_excel'。 我没有问题 运行 除了最后一行(保存结果)之外的整个代码。
你能帮我找出错误吗?谢谢
from collections import Counter
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from scipy.spatial import distance
df1=pd.read_csv("Clus_readinFile.csv", index_col="Site_ID")
df1.head(5)
# Standardization (z-score)
scaler = StandardScaler()
df_std = scaler.fit_transform(df1)
df_std
centroids_All = []
for cluster in range(1,15):
kmeans = KMeans(n_jobs = -1, n_clusters = cluster, init='k-means++')
kmeans.fit(df_std)
counts = dict(Counter(kmeans.labels_))
counts = pd.DataFrame.from_dict(counts, orient='index', columns=['Stores'])
centroids_deno = pd.DataFrame(scaler.inverse_transform(kmeans.cluster_centers_),columns= df1.columns)
centroids_deno['Stores'] = counts['Stores']
centroids_All.append(centroids_deno)
centroids_All.to_excel("centroidsAllResult.xlsx")
to_excel()
函数定义在pandas对象下,可以被pandasDataFrame对象调用。但是,要调用 to_excel()
函数的对象 centroids_All
被定义为一个列表。尽管您将 pandas Dataframe 附加到列表 centroids_All
中,但它本身仍然不是 pandas DataFrame。因此错误。
您可以在循环中使用 Dataframe.append() 到 append/concatenate 生成的 DataFrame,而不是使用列表追加。然后使用生成的 DataFrame 对象调用 to_excel()
只需将代码 centroids_All = []
更改为:
centroids_All = pd.DataFrame()
这是为了创建一个空的 pandas DataFrame 而不是空列表。
追加 DataFrame 的代码只需要稍作改动(幸运的是,语法与追加列表的代码相似)。 ignore_index=True
被添加到 append() 调用中以重新序列化索引。结果代码是:
centroids_All = centroids_All.append(centroids_deno, ignore_index=True)
注意将附加结果重新分配回合并数据框。