DeprecationWarning: In a future version


from pylab import mpl
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams["font.sans-serif"] = ["SimHei"]

# 读取数据
# 选择Excel文件
wine = pd.read_excel("E:\\秦皇岛海上平台项目\\关联度分析1.xlsx")
wine.head()

# 无量纲化
def dimensionlessProcessing(df):
    newDataFrame = pd.DataFrame(index=df.index)
    columns = df.columns.tolist()
    for c in columns:
        d = df[c]
        MAX = d.max()
        MIN = d.min()
        MEAN = d.mean()
        newDataFrame[c] = ((d - MEAN) / (MAX - MIN)).tolist()
    return newDataFrame

def GRA_ONE(gray, m=0):
    # 读取为df格式
    gray = dimensionlessProcessing(gray)
    # 标准化
    std = gray.iloc[:, m]  # 为标准要素
    gray.drop(str(m),axis=1,inplace=True)
    ce = gray.iloc[:, 0:]  # 为比较要素
    shape_n, shape_m = ce.shape[0], ce.shape[1]  # 计算行列

    # 与标准要素比较,相减
    a = np.zeros([shape_m, shape_n])
    for i in range(shape_m):
        for j in range(shape_n):
            a[i, j] = abs(ce.iloc[j, i] - std[j])

    # 取出矩阵中最大值与最小值
    c, d = np.amax(a), np.amin(a)

    # 计算值
    result = np.zeros([shape_m, shape_n])
    for i in range(shape_m):
        for j in range(shape_n):
            result[i, j] = (d + 0.5 * c) / (a[i, j] + 0.5 * c)

    # 求均值,得到灰色关联值,并返回
    result_list = [np.mean(result[i, :]) for i in range(shape_m)]
    result_list.insert(m,1)
    return pd.DataFrame(result_list)


def GRA(DataFrame):
    df = DataFrame.copy()
    list_columns = [
        str(s) for s in range(len(df.columns)) if s not in [None]
    ]
    df_local = pd.DataFrame(columns=list_columns)
    df.columns=list_columns
    for i in range(len(df.columns)):
        df_local.iloc[:, i] = GRA_ONE(df, m=i)[0]
    return df_local


import seaborn as sns


def ShowGRAHeatMap(DataFrame):
    colormap = plt.cm.RdBu
    ylabels = DataFrame.columns.values.tolist()
    f, ax = plt.subplots(figsize=(14, 14))
    ax.set_title('GRA HeatMap')

    # 设置展示一半,如果不需要注释掉mask即可

    mask = np.zeros_like(DataFrame)
    mask[np.triu_indices_from(mask)] = True

    with sns.axes_style("white"):
        sns.heatmap(DataFrame,
                    cmap="YlGnBu",
                    annot=True,
                    mask=mask,
                    )
    plt.show()


data_wine_gra = GRA(wine)
ShowGRAHeatMap(data_wine_gra)
但是会出现
E:\pythonProject2\影响因素分析\灰色关联法.py:65: DeprecationWarning: In a future version, `df.iloc[:, i] = newvals` will attempt to set the values inplace instead of always setting a new array. To retain the old behavior, use either `df[df.columns[i]] = newvals` or, if columns are non-unique, `df.isetitem(i, newvals)`
  df_local.iloc[:, i] = GRA_ONE(df, m=i)[0]

你所看到的 DeprecationWarning 是由于你正在使用的 Pandas 版本开始弃用某种方式来给 DataFrame 分配值。在你的代码中,这个问题来自以下这行:

df_local.iloc[:, i] = GRA_ONE(df, m=i)[0]

警告建议你用以下两种方式来替换:

df[df.columns[i]] = newvals
df.isetitem(i, newvals)

所以,针对你的代码,你可以这样修改来消除这个警告:

df_local[df_local.columns[i]] = GRA_ONE(df, m=i)[0]

或者:

df_local.isetitem(i, GRA_ONE(df, m=i)[0])

上述更改会确保你的代码在未来的 Pandas 版本上仍能正常运行。【gpt4.0参考率<30%】

df_local.iloc[:, i] = GRA_ONE(df, m=i)[0]
修改为
df[df.columns[i]] = GRA_ONE(df, m=i)[0]