【问题标题】:Python pandas: Best way to normalize data? [duplicate]Python pandas:规范化数据的最佳方法? [复制]
【发布时间】:2017-03-04 23:25:03
【问题描述】:

我有一个大约 80 列的大熊猫数据框。数据框中的 80 列中的每一列都报告网站的每日流量统计信息(列是网站)。

由于我不想使用原始流量统计信息,我更喜欢规范化我的所有列(第一列除外,即日期)。从 0 到 1 或(甚至更好)从 0 到 100。

Date        A      B      ...
10/10/2010  100.0  402.0  ...
11/10/2010  250.0  800.0  ...
12/10/2010  800.0  2000.0 ...
13/10/2010  400.0  1800.0 ...

话虽如此,我想知道应用哪种规范化。 Min-Max scaling 与 z-Score 标准化(标准化)?我的一些列有很强的异常值。有一个例子会很棒。很抱歉无法提供完整的数据。

【问题讨论】:

    标签: python-3.x pandas normalization


    【解决方案1】:

    首先,将 Date 列转换为索引。

    dates = df.pop('Date')
    df.index = dates
    

    然后要么使用 z-score 归一化:

    df1 = (df - df.mean())/df.std()
    

    或最小-最大缩放:

    df2 = (df-df.min())/(df.max()-df.min())
    

    我可能会建议 z-score 归一化,因为 min-max 缩放非常容易受到异常值的影响。

    【讨论】:

    • 如果异常值对我的感知来说太强了,那么您会推荐 min-max 吗?
    • 另外,我试过这个。不幸的是,这些值不在 0 和 1 或 0 和 1 之间,而是从 -3 到 1?也应该有小数?
    • 如果您有任何强烈的异常值并且您不想在分析之前将它们从数据集中删除,那么我建议您进行 z-score 标准化。
    • 我认为您可能遇到了错误,因为我每次执行命令时都会破坏 df 的旧副本。我稍微修改了一下,让它更直接。
    • 运行代码后,再运行df1.describe()和df2.describe()。 df1.describe() 应该告诉您每列的平均值为零,每列的标准差为 1。 df2.describe() 应该告诉您每列的最小值为零,每列的最大值为 1。
    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2020-05-31
    • 1970-01-01
    • 2010-11-30
    • 2018-04-03
    • 2021-07-15
    相关资源
    最近更新 更多