Python数据帧数据清除-标准化列范围

时间:2018-07-23 19:28:01

标签: python python-3.x pandas dataframe normalization

我有一个2171列和200多个行的df。我想将这些列的范围归一化。

[输入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
.
.
.

[如果仅在一个col上使用,我不确定如何将其应用于一系列cols]

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 个答案:

答案 0 :(得分:0)

您可以一次将归一化应用于所有所需的列:

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在this answer中概述了它不适用于系列的原因:

  

series上使用apply时,将在每个元素上调用函数。在DataFrame上使用apply时,将在每个上调用您的函数。

因此,您正在尝试获取浮点数的meanstd,而浮点数没有这样的属性,从而导致错误:{{1 }}

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

答案 1 :(得分:0)

您也可以使用MinMaxScaler中的Sklean。它将自动适合/缩放0到1之间的所有值。请参见this examplethis one

func QueryDB(qstring string) (*sql.Rows) {
    psqlInfo := fmt.Sprintf("host=%s port=%d user=%s dbname=%s sslmode=disable", host, port, user, dbname)
    db, err := sql.Open("postgres", psqlInfo)
    if err != nil {
      panic(err)
    }
    defer db.Close()

    //Ping method opens the connection
    err = db.Ping()
    if err != nil {
       panic(err)
    }

    //rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)
    log.Printf("executing SQL %s\n",qstring)
    rows, err := db.Query(qstring)
    if err != nil {
       log.Fatal(err)
    }
    return rows
}