首页 > 解决方案 > 排除列具有 NA 值的行

问题描述

这是我的数据样本

在此处输入图像描述

我编写了这段代码,它删除了所有分类列(例如。MsZoning)。但是,一些非分类列具有NA价值。如何将它们从我的数据集中排除。

def main():
    print('Starting program execution')
    iowa_train_prices_file_path='C:\\...\\programs\\python\\kaggle_competition_iowa_house_prices_train.csv'
    iowa_file_data = pd.read_csv(iowa_train_prices_file_path)
    print('Read file')
    
    model_random_forest = RandomForestRegressor(random_state=1)
    features = ['MSSubClass','MSZoning',...]
    y = iowa_file_data.SalePrice
    # every colmn except SalePrice
    X = iowa_file_data.drop('SalePrice', axis = 1)
    #The object dtype indicates a column has text (hint that the column is categorical)
    X_dropped = X.select_dtypes(exclude=['object'])
    print("fitting model")
    model_random_forest.fit(X_dropped, y)

    print("MAE of dropped categorical approach");


pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
main()

当我运行程序时,我收到错误,ValueError: Input contains NaN, infinity or a value too large for dtype('float32')我认为这是由于NA.Id=8

问题 1 - 我如何完全删除这些行 问题 2 - 这些列的类型是什么,这些列大多是 nos。但中间有文字吗?我以为我会做print("X types",type(X.columns)),但这并没有给出结果

标签: pythonpandasdataframe

解决方案


要删除 nans,您可以将它们替换为另一个值。使用零是常见的做法。

iowa_file_data = iowa_file_data.fillna(0)

如果您仍想删除整列,请使用

iowa_file_data = iowa_file_data.dropna(axis='columns')

如果要删除整行,请使用

iowa_file_data = iowa_file_data.dropna()

对于您的第二个问题,据我了解,您可能希望查看有关 pandas objectdtype: link的一些信息。


推荐阅读