【问题标题】:Exclude rows which have NA value for a column [duplicate]排除列具有 NA 值的行[重复]
【发布时间】:2021-05-28 14:27:47
【问题描述】:

这是我的数据样本

我编写了删除所有分类列的代码(例如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 - 此类列的类型主要是什么?但中间有文字吗?我以为我会做print("X types",type(X.columns)),但这并没有给出结果

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    要删除 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 object dtype: link 的一些信息。

    【讨论】:

    • 我可以删除整行并使用具有 NA 的列或删除整列作为唯一选项吗?
    • 要删除行,请跳过 axis=.. 参数。我编辑了我的帖子以包含此内容。
    猜你喜欢
    • 2014-11-13
    • 2018-10-21
    • 1970-01-01
    • 2016-08-23
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多