当前位置: 首页 > 知识库问答 >
问题:

Python数据帧数据清理-规范化列的范围

高夜洛
2023-03-14

我有一个包含2171列和200行的df。我想标准化这些COL的范围。

[输入df]

Time           '340.0'   '341.0'   '342.0'   'Mode'
11:30:15 PM    0.25       0.35      0.65      light
11:31:15 PM    0.22       0.30      0.62      auto
11:32:15 PM    0.32       0.39      0.98      auto
.
.
.

[如果代码仅用于一个列,我不确定如何应用于一系列列]

sr_df['340.0'] = sr_df['340.0'].apply(lambda x: (x - x.mean()) / (x.std()))

我对python非常陌生,我不知道为什么它会给我以下错误:

AttributeError: 'float' object has no attribute 'mean'

共有2个答案

金秦斩
2023-03-14

您也可以使用Skleans的MinMaxScaler。它将自动匹配/缩放0到1之间的所有值。看看这个例子和这个。

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

columns = ['301', '341', '342'] 
df[columns] = scaler.fit_transform(df[columns])
柳墨一
2023-03-14

您可以一次对所有所需列应用规范化:

sr_df[['340.0', '341.0', '342.0']].apply(lambda x: ((x-x.mean()) / (x.std())))

sr_df[['340.0', '341.0', '342.0']]= sr_df[['340.0', '341.0', '342.0']].apply(lambda x: ((x-x.mean()) / (x.std())))

>>> sr_df
          Time     340.0     341.0     342.0   Mode
0  11:30:15 PM -0.259828  0.073922 -0.500626  light
1  11:31:15 PM -0.844441 -1.034910 -0.650814   auto
2  11:32:15 PM  1.104269  0.960988  1.151440   auto

更好的是,您可以将其应用于所有数字列(如果这是您想要的):

# Get a list of numeric columns:
cols = list(sr_df.select_dtypes(include=[np.number]).columns.values)

sr_df[cols] = sr_df[cols].apply(lambda x: ((x-x.mean()) / (x.std())))

如果要修复代码,可以将函数应用于数据框的某一列(而不是应用于系列)。@BrenBarn的回答概述了它在系列中不起作用的原因:

当您在系列上使用应用时,您的函数将在每个元素上被调用。当您在DataFrame上使用应用时,您的函数将在每列上被调用。

因此,您正在尝试获取浮点的meanstd,而浮点没有此类属性,这会导致错误:AttributeError:“float”对象没有属性“mean”

# this works:
sr_df[['340.0']].apply(lambda x: (x - x.mean()) / (x.std()))

# This doesn't:
# sr_df['340.0'].apply(lambda x: (x - x.mean()) / (x.std()))

# The difference is this:
>>> type(sr_df['340.0'])
<class 'pandas.core.series.Series'>
>>> type(sr_df[['340.0']])
<class 'pandas.core.frame.DataFrame'>
 类似资料:
  • 我有一个数据框,如图所示: 我必须将数据框的关闭列规范化如下: > 对于每个符号,我们必须将随后几天的收盘价除以第一个收盘价。这意味着2020年11月24日APLO的正常化关闭时间将计算为: 标准化收盘价=(2020年11月24日收盘)/(2020年11月23日收盘)=0.9915(仅适用于APLO) 现在,如果符号改变,方法保持不变,只有上述公式中的值改变。因此,对于AUBANK而言,2020年

  • 如何规范化主要由嵌套数组组成的 spark 数据帧? 我想要类似emple的东西,它将保留(id,foo,bar,baz)的模式,但为数组的每个值返回一个单独的记录。最终结果不应再包含数组。 Foo和baz是相关的。它们的顺序不得扭曲。它们总是具有相同的长度,foo的第一个值与baz的第一个数值相关,以此类推。也许我应该先将它们组合成一个列/结构? 最终结果应如下所示: 部分相关问题-爆炸(转置?

  • 表规范 命名统一小写下划线 非CMF核心应用,统一带应用表前缀,如portal_ 插件表,统一带插件表前缀,如:demo_ 表默认编码utf8mb4,默认排序规则utf8mb4_general_ci 引擎统一innodb 写表注释 字段规范 命名统一小写下划线 非自增主键一定要写字段注释 数据类型尽量用数字类型,数字类型的比字符类型的要快很多。 数据类型尽量小,这里的尽量小是指在满足可以预见的未来

  • 表规范 命名统一小写下划线 非CMF核心应用,统一带应用表前缀,如portal_ 插件表,统一带插件表前缀,如:plugindemo 表默认编码utf8mb4,默认排序规则utf8mb4_general_ci 引擎统一innodb 写表注释 字段规范 命名统一小写下划线 非自增主键一定要写字段注释 数据类型尽量用数字类型,数字类型的比字符类型的要快很多。 数据类型尽量小,这里的尽量小是指在满足可以

  • 你能帮我写以下的JOLT规范吗? 输入JSON: 我需要得到输出:

  • 我有一个熊猫数据框,它有语料库的术语频率,术语为行,年份为列,就像这样: 我希望能够通过将每个单词的值除以给定年份的总单词数来标准化它们——有些年份包含两倍多的文本,所以我试图按年缩放(像谷歌图书一样)。我已经看了如何缩放单个列的例子,克里斯·阿尔邦和我在SO上看到了缩放所有列的例子,但是每次我试图将这个数据框转换为一个数组来缩放时,事情都会窒息列这个词不是数字。(我尝试将术语列设置为索引,但不太