我正在尝试计算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}
答案 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