【问题标题】:Type casting when standardising a dataframe标准化数据框时的类型转换
【发布时间】:2018-01-17 23:56:19
【问题描述】:

我有一个包含两列(年份、时间)的数据框,它们是整数值。

import pandas as pd
import numpy as np

male100 = pd.read_csv('data/male100.csv', header = 0)

time_mean = male100['Time'].mean()
time_std = male100['Time'].std()

year_mean = male100['Year'].mean()
year_std = male100['Year'].std()


elem_nb = male100.shape[0]

for i in range(elem_nb):
    male100.at[i, 'Year'] = male100.at[i, 'Year'] - year_mean
    male100.at[i, 'Year'] = male100.at[i, 'Year'] / year_std

print(male100)

我的标准差year_std 是一个浮点值,我的平均值year_mean 是一个整数。 在这个阶段,male100 应该为Year 列的元素返回浮点值。 但是,情况并非如此,如下所示。

    Year   Time
0     -1  12.00
1     -1  11.00
2     -1  11.00
3     -1  11.20
4     -1  10.80
5     -1  10.80
6      0  10.80
7      0  10.60
8      0  10.80
9      0  10.30
10     0  10.30
11     0  10.30
12     0  10.40
13     0  10.50
14     0  10.20
15     0  10.00
16     0   9.95
17     0  10.14
18     0  10.06
19     0  10.25
20     0   9.99
21     0   9.92
22     1   9.96
23     1   9.84
24     1   9.87
25     1   9.85
26     1   9.69

我想male100.at[i, 'Year'] = male100.at[i, 'Year'] / year_std 这里有一个自动转换,但不明白为什么。或者这可能与更改 DataFrame 的数据类型有关。

我该如何克服这个问题?

【问题讨论】:

    标签: python pandas machine-learning


    【解决方案1】:

    你可以使用

    male100.at[i, 'Year'] = float(male100.at[i, 'Year']) / year_std
    

    male100.at[i, 'Year'] = male100.at[i, 'Year'].astype('float') / year_std
    

    推荐

    另外,对于减法和除法,不需要重复循环,你可以简单地使用

    male100['Year'] = (male100['Year']-year_mean)/year_std
    

    请注意,这也会自动将您的值转换为浮点数,因此无需像第一个解决方案中给出的那样将它们显式转换为浮点数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多