Python pandas:规范化数据的最佳方法? [复制]

Posted

技术标签:

【中文标题】Python pandas:规范化数据的最佳方法? [复制]【英文标题】:Python pandas: Best way to normalize data? [duplicate] 【发布时间】: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 标准化(标准化)?我的一些列有很强的异常值。有一个例子会很棒。很抱歉无法提供完整的数据。

【问题讨论】:

【参考方案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。

以上是关于Python pandas:规范化数据的最佳方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python pandas - 处理嵌套 groupby 的最佳方法

如何通过 Python Pandas 正确规范化 json

pandas / python中的最佳数据库查找和更新

Python Pandas Dataframe:规范化 0.01 到 0.99 之间的数据?

Python pandas:对分组的第一行和最后一行应用操作并将结果添加为列的最佳方法是啥?

将丑陋的 csv 解析为 Pandas DataFrame 的最佳方法