最近在阅读《Python数据分析与挖掘实战》一书,其中发现不少内容没有更新,导致提供的代码直接运行会出现错误。

下面是第8章《中医证型关联规则挖掘》的“代码清单8-1 数据聚类离散化代码”:

#-*- coding:utf-8 -*-

from __future__ import print_function
import pandas as pd
from sklearn.cluster import KMeans

datafile = '../data/data.xls'
processedfile = '../tmp/data_processed.xls'
typelabel = {u'肝气郁结证型系数':'A', u'热毒蕴结证型系数':'B', u'冲任失调证型系数':'C', u'气血两虚证型系数':'D', u'脾胃虚弱证型系数':'E', u'肝肾阴虚证型系数':'F'}
k = 4

data = pd.read_excel(datafile)
keys = list(typelabel.keys())
result = pd.DataFrame()

if __name__ == '__main__':
    for i in range(len(keys)):
        print(u'正在进行“%s”的聚类...' % keys[i])
        kmodel = KMeans(n_clusters=k, n_jobs=4)
        kmodel.fit(data[[keys[i]]].as_matrix())

        r1 = pd.DataFrame(kmodel.cluster_centers_, columns=[typelabel[keys[i]]])
        r2 = pd.Series(kmodel.labels_).value_counts()
        r2 = pd.DataFrame(r2, columns=[typelabel[keys[i]] + 'n'])
        r = pd.concat([r1, r2], axis=1).sort(typelabel[keys[i]])
        r.index = [1,2,3,4]
        r[typelabel[keys[i]]] = pd.rolling_mean(r[typelabel[keys[i]]], 2)
        r[typelabel[keys[i]]][1] = 0.0
        result = result.append(r.T)

    result = result.sort()
    result.to_excel(processedfile)

其中,第25、31行中会出现 ‘DataFrame’ object has no attribute ‘sort’ 错误,第27行会出现 module ‘pandas’ has no attribute ‘rolling_mean’ 的错误。

关于 ‘DataFrame’ object has no attribute ‘sort’

sort 已经弃用,代替使用的是 sort_values 或者 sort_index

关于 module ‘pandas’ has no attribute ‘rolling_mean’ **

pandas包中关于“rolling_mean”已经更新用法,代替使用的是 rolling

“rolling_mean” 的用法应该对应为df.rolling(2).mean()

修改版代码

#-*- coding:utf-8 -*-

from __future__ import print_function
import pandas as pd
from sklearn.cluster import KMeans

datafile = '../data/data.xls'
processedfile = '../tmp/data_processed.xls'
typelabel = {u'肝气郁结证型系数':'A', u'热毒蕴结证型系数':'B', u'冲任失调证型系数':'C', u'气血两虚证型系数':'D', u'脾胃虚弱证型系数':'E', u'肝肾阴虚证型系数':'F'}
k = 4

data = pd.read_excel(datafile)
keys = list(typelabel.keys())
result = pd.DataFrame()

if __name__ == '__main__':
    for i in range(len(keys)):
        print(u'正在进行“%s”的聚类...' % keys[i])
        kmodel = KMeans(n_clusters=k, n_jobs=4)
        kmodel.fit(data[[keys[i]]].as_matrix())

        r1 = pd.DataFrame(kmodel.cluster_centers_, columns=[typelabel[keys[i]]])
        r2 = pd.Series(kmodel.labels_).value_counts()
        r2 = pd.DataFrame(r2, columns=[typelabel[keys[i]] + 'n'])
        r = pd.concat([r1, r2], axis=1).sort_values(typelabel[keys[i]])
        r.index = [1,2,3,4]
        r[typelabel[keys[i]]] = r[typelabel[keys[i]]].rolling(2).mean()
        r[typelabel[keys[i]]][1] = 0.0
        result = result.append(r.T)

    result = result.sort_index()
    result.to_excel(processedfile)

本文由 小TiD笔记 发布在小TiD笔记,转载此文请保持文章完整性,并请附上文章来源(小TiD笔记)及本页链接。

原文链接: https://www.tidnotes.ga/2019/11/python-error-sort.html