我使用scipy中的Z-score对数据集进行规范化,如下所示:import numpy as np
import pandas as pd
from scipy import stats
from scipy.stats import zscore
df = pd.DataFrame(pd.read_csv('dataset.csv', sep=','))
df = df.dropna(how='any') # drop nan entries
df = df[(np.abs(stats.zscore(df)) < 3).all(axis=1)] # remove outliers
print(df.describe())
df = df.apply(zscore) # Normalization
print(df.describe())
但是,我得到一些列被更改为NaN,特别是mta_tax和trip_type,如下所示,但是它们在应用Z-score规范化之前是数值的。这是我的代码中的一个bug还是Z-score可以生成NaN?
标准化之前:VendorID RatecodeID PULocationID DOLocationID \
count 1.055286e+07 1.055286e+07 1.055286e+07 1.055286e+07
mean 1.794324e+00 1.000000e+00 1.106734e+02 1.285285e+02
std 4.041947e-01 4.353414e-04 7.541486e+01 7.7291