Pandas DataFrame的最大值,最小值和平均值在带有Nan的列上失败

时间:2019-01-29 20:34:39

标签: python pandas numpy

我正在尝试计算pandas DataFrame中每一列的最大值,最小值和平均值。但是,在清理我的列时遇到了麻烦。

我的其中一列包含一些“?”,而不是我尝试通过以下操作清除的值:

df = pd.read_csv("Auto.csv")

df["horsepower"].replace("?", np.nan, inplace=True)  # sanitize the horsepower column

min_values = df.drop(columns=["name"]).dropna().min().to_dict()
max_values = df.drop(columns=["name"]).dropna().max().to_dict()
mean_values = df.drop(columns=["name"]).dropna().mean().to_dict()

这样做时,最小值,平均值和最大值不正确!请注意,由于要排除定性数据,因此删除了“名称”列。

可以在此处http://www-bcf.usc.edu/~gareth/ISL/Auto.csv

下载数据集

编辑:

Minimum values:  {'mpg': 9.0, 'cylinders': 3.0, 'displacement': 68.0, 'horsepower': 100.0, 'weight': 1613.0, 'acceleration': 8.0, 'year': 70.0, 'origin': 1.0}
Maximum values:  {'mpg': 46.6, 'cylinders': 8.0, 'displacement': 455.0, 'horsepower': 98.0, 'weight': 5140.0, 'acceleration': 24.8, 'year': 82.0, 'origin': 3.0}
Mean values:  {'mpg': 23.44591836734694, 'cylinders': 5.471938775510204, 'displacement': 194.41198979591837, 'horsepower': inf, 'weight': 2977.5841836734694, 'acceleration': 15.541326530612228, 'year': 75.9795918367347, 'origin': 1.5765306122448979}

2 个答案:

答案 0 :(得分:2)

正如我在上面的评论中提到的,dropna将在其中包含任何NaN值的情况下删除整行

df = pd.read_csv("Auto.csv")

df["horsepower"].replace("?", np.nan, inplace=True)
df["horsepower"]=pd.to_numeric(df["horsepower"],errors='coerce')

使用describe

df.describe()

答案 1 :(得分:1)

如果您不介意将horsepower列的dtype当作浮点数,则添加以下行即可:df["horsepower"] = df["horsepower"].astype(np.float64)

使用您的示例:

df = pd.read_csv("Auto.csv")
df["horsepower"].replace("?", np.nan, inplace=True)
df["horsepower"] = df["horsepower"].astype(np.float64)

然后我得到df.drop(['name'], axis=1).max(axis=0)

mpg               46.6
cylinders          8.0
displacement     455.0
horsepower       230.0
weight          5140.0
acceleration      24.8
year              82.0
origin             3.0
dtype: float64

对于df.drop(['name'], axis=1).min(axis=0),我得到:

mpg                9.0
cylinders          3.0
displacement      68.0
horsepower        46.0
weight          1613.0
acceleration       8.0
year              70.0
origin             1.0
dtype: float64

对于df.drop(['name'], axis=1).mean(axis=0),我得到:

mpg               23.515869
cylinders          5.458438
displacement     193.532746
horsepower       104.469388
weight          2970.261965
acceleration      15.555668
year              75.994962
origin             1.574307
dtype: float64