Python 熊猫:标准化数据时获得0和N
我在熊猫中标准化数据时遇到了一些问题。我已经创建了一个模型,并试图用它来预测 首先,我有:Python 熊猫:标准化数据时获得0和N,python,pandas,Python,Pandas,我在熊猫中标准化数据时遇到了一些问题。我已经创建了一个模型,并试图用它来预测 首先,我有: _text_img_count _text_vid_count _text_link_count _text_par_count ... 0 2 0 6 然后我将标准化如下: x = numeric_df.values #returns a numpy array min_max_scal
_text_img_count _text_vid_count _text_link_count _text_par_count ...
0 2 0 6
然后我将标准化如下:
x = numeric_df.values #returns a numpy array
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
numeric_df_normalized = pd.DataFrame(x_scaled)
numeric_df_normalized = pd.DataFrame(numeric_df_normalized, columns=numeric_df.columns)
现在,数值_df_规格化如下所示:
0 1 2 3 4 5 6 7 8 9 ... 13 14 15 16 \
0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
17 18 19 20 21 22
0 0.0 0.0 0.0 0.0 0.0 0.0
所以我丢失了我的列名,我的值都是0
最后,我尝试从原始数字_df中添加旧列名,如下所示:
x = numeric_df.values #returns a numpy array
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
numeric_df_normalized = pd.DataFrame(x_scaled)
numeric_df_normalized = pd.DataFrame(numeric_df_normalized, columns=numeric_df.columns)
我回来了:
_text_img_count _text_vid_count _text_link_count ...
NaN NaN NaN
所以有几个问题:
1为什么规范化会导致我丢失列名并将其设置为0
2为什么从numeric_df添加回列名会导致我的0转换为NaN
谢谢 如果要将结果转换为具有相同结构的数据帧,可以执行以下操作:
numeric_df_normalized.columns=numeric_df.columns
numeric_df_normalized.index=numeric_df.index
第二行是,如果您也有索引,而不是
numeric_df_normalized = pd.DataFrame(numeric_df_normalized, columns=numeric_df.columns)
关于0,如果第一行中的值是每个特征的最小可能值,则可能发生这种情况。然后,当缩放它们时,它们将转换为0
例如,考虑下面的规范化:
from sklearn import preprocessing
df=pd.DataFrame({'a':[1,2],'b':[3,4]})
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(df.values)
x_标度为
因此,左上角1变为0,因为1如果要将结果转换为具有相同结构的数据帧,可以执行以下操作:
numeric_df_normalized.columns=numeric_df.columns
numeric_df_normalized.index=numeric_df.index
第二行是,如果您也有索引,而不是
numeric_df_normalized = pd.DataFrame(numeric_df_normalized, columns=numeric_df.columns)
关于0,如果第一行中的值是每个特征的最小可能值,则可能发生这种情况。然后,当缩放它们时,它们将转换为0
例如,考虑下面的规范化:
from sklearn import preprocessing
df=pd.DataFrame({'a':[1,2],'b':[3,4]})
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(df.values)
x_标度为
所以左上角的1从1变为0
1为什么规范化会导致我丢失列名并将其设置为0
:
因此,当data min==data max时,缩放结果为0
2为什么从numeric_df添加回列名会导致我的0转换为NaN
请注意,numeric_df_normalized已经是一个数据帧,因此pd.DataFramenumeric_df_normalized,columns=numeric_df.columns将尝试用新列匹配当前数据帧。因为没有匹配的列名,所以结果数据为NaN
1为什么规范化会导致我丢失列名并将其设置为0
:
因此,当data min==data max时,缩放结果为0
2为什么从numeric_df添加回列名会导致我的0转换为NaN
请注意,numeric_df_normalized已经是一个数据帧,因此pd.DataFramenumeric_df_normalized,columns=numeric_df.columns将尝试用新列匹配当前数据帧。由于没有匹配的列名,结果数据为NaN。x.max和x.min的最小值和最大值是多少?1。检查最小值和最大值。2.您正在从dataframe创建dataframe。。。最好使用以下选项:numeric_df_normalized=pd.DataFramex_scaled,columns=numeric_df.columns是x.max和x.min的最小值和最大值?1。检查最小值和最大值。2.您正在从dataframe创建dataframe。。。最好使用:numeric\u df\u normalized=pd.DataFramex\u scaled,columns=numeric\u df.columns