TypeError:“DataFrame”对象是可变的,因此它们不能被散列

Posted

技术标签:

【中文标题】TypeError:“DataFrame”对象是可变的,因此它们不能被散列【英文标题】:TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed 【发布时间】:2017-04-05 18:35:49 【问题描述】:

我的代码:

samples = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", sep=',',header=None)
varieties = pd.DataFrame(samples.iloc[:,0])
kmeans = KMeans(n_clusters = 3)
labels = kmeans.fit_predict(samples)
#setting 'labels' according to given data
labels += 1
#converting 'labels' to pandas DataFrame
labels = pd.DataFrame(labels)
df = pd.DataFrame('labels':[labels], 'varieties':[varieties])
ct = pd.crosstab(df['labels'],df['varieties'])

我想将这些数据框(标签和品种)用于“交叉表”功能。 请让我知道我该怎么做?

【问题讨论】:

"TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed" while sorting pandas dataframe index的可能重复 【参考方案1】:

为什么要将标签存储在单独的数据框中?可能更容易将其保存为变量数据框中的新列,然后在这两列之间运行交叉表。

samples = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", sep=',',header=None)
varieties = pd.DataFrame(samples.iloc[:,0])
kmeans = KMeans(n_clusters = 3)
varieties['labels'] = kmeans.fit_predict(samples)
#setting 'labels' according to given data
varieties['labels'] += 1
pd.crosstab(varieties.iloc[:,0], varieties['labels'])

【讨论】:

@0AJ0 如果答案有帮助,也请随意投票

以上是关于TypeError:“DataFrame”对象是可变的,因此它们不能被散列的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“DataFrame”对象是可变的,因此它们不能被散列

TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“DataFrame”

获取TypeError:在Pandas Dataframe中设置索引时,'list'对象不可调用

Fastparquet 在使用 dataframe.to_parquet() 时给出“TypeError:预期的 str、字节或 os.PathLike 对象,而不是 _io.BytesIO”

TypeError:无法连接类型为“<class 'yfinance.ticker.Options'>”的对象;只有 Series 和 DataFrame obj 是有效的

PySpark:TypeError:“行”对象不支持项目分配