df.fillna() 从切片更新多列时不起作用
df.fillna() not working when updating multiple columns from a slice
fillna() 和 df 切片有问题。我的 python 训练轮还在,如果有任何帮助,我们将不胜感激。我在 SE 上找到了很多接近的例子,但是由于条件和多列我没有找到任何适用于这种情况的例子。
数据:
高级回归补偿:https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data
但是,不需要像我那样下拉并组合训练和测试数据,因为该切片仅包含 garage_cat_columns 中列出的 columns/factors 的约 150 np.nan 行。
Id 列是 1 到 3000 之间的整数
# Columns to update and criteria to slice
garage_cat_columns = ['GarageType','GarageYrBlt','GarageQual','GarageCond','GarageFinish']
no_garage = testing.Id[((testing['GarageType'].isnull()) &
(testing['GarageYrBlt'].isnull()) &
(testing['GarageQual'].isnull()) &
(testing['GarageCond'].isnull()) &
(testing['GarageFinish'].isnull()))].tolist() # are all null?
# Best of my knowledge this is textbook (old text book) fillna()
testing[testing.Id.where(df.Id.isin(no_garage)).notnull()][garage_cat_columns].fillna("None", inplace=True)
我收到“切片副本”警告(意料之中),但似乎无法找到将其写回原始数据框的方法,因此我的更改将“提交”。
一些失败的尝试:
# 1 tried with and without double brackets
testing[[garage_cat_columns]] = testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()] \
[garage_cat_columns] = 'None'
# 2
testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()][garage_cat_columns] = 'None'
# 3
testing[garage_cat_columns] = testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None")
# 4 tried with and without double brackets
testing[[garage_cat_columns]] = testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None", inplace=True)
# 5 Hail Mary
testing[testing['Id'].where(df['Id'].isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None", inplace=True) = \ # equality here
testing[testing['Id'].where(df['Id'].isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None", inplace=True)
非常感谢任何帮助!
如果需要设置所有 Id
如果包含至少一行数据且只有缺失值到字符串 None
使用:
garage_cat_columns = ['GarageType','GarageYrBlt','GarageQual','GarageCond','GarageFinish']
no_garage = testing.loc[testing[garage_cat_columns].isnull().all(axis=1), 'Id'].tolist()
testing.loc[df['Id'].isin(no_garage), garage_cat_columns] = 'None'
如果只需要设置所有 None
的行,如 Nonetype:
mask = testing[garage_cat_columns].isnull().all(axis=1)
testing.loc[mask, garage_cat_columns] = 'None'
fillna() 和 df 切片有问题。我的 python 训练轮还在,如果有任何帮助,我们将不胜感激。我在 SE 上找到了很多接近的例子,但是由于条件和多列我没有找到任何适用于这种情况的例子。
数据: 高级回归补偿:https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data
但是,不需要像我那样下拉并组合训练和测试数据,因为该切片仅包含 garage_cat_columns 中列出的 columns/factors 的约 150 np.nan 行。
Id 列是 1 到 3000 之间的整数
# Columns to update and criteria to slice
garage_cat_columns = ['GarageType','GarageYrBlt','GarageQual','GarageCond','GarageFinish']
no_garage = testing.Id[((testing['GarageType'].isnull()) &
(testing['GarageYrBlt'].isnull()) &
(testing['GarageQual'].isnull()) &
(testing['GarageCond'].isnull()) &
(testing['GarageFinish'].isnull()))].tolist() # are all null?
# Best of my knowledge this is textbook (old text book) fillna()
testing[testing.Id.where(df.Id.isin(no_garage)).notnull()][garage_cat_columns].fillna("None", inplace=True)
我收到“切片副本”警告(意料之中),但似乎无法找到将其写回原始数据框的方法,因此我的更改将“提交”。
一些失败的尝试:
# 1 tried with and without double brackets
testing[[garage_cat_columns]] = testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()] \
[garage_cat_columns] = 'None'
# 2
testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()][garage_cat_columns] = 'None'
# 3
testing[garage_cat_columns] = testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None")
# 4 tried with and without double brackets
testing[[garage_cat_columns]] = testing[testing['Id'].where(df['Id']isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None", inplace=True)
# 5 Hail Mary
testing[testing['Id'].where(df['Id'].isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None", inplace=True) = \ # equality here
testing[testing['Id'].where(df['Id'].isin(no_garage)).notnull()] \
[garage_cat_columns].fillna("None", inplace=True)
非常感谢任何帮助!
如果需要设置所有 Id
如果包含至少一行数据且只有缺失值到字符串 None
使用:
garage_cat_columns = ['GarageType','GarageYrBlt','GarageQual','GarageCond','GarageFinish']
no_garage = testing.loc[testing[garage_cat_columns].isnull().all(axis=1), 'Id'].tolist()
testing.loc[df['Id'].isin(no_garage), garage_cat_columns] = 'None'
如果只需要设置所有 None
的行,如 Nonetype:
mask = testing[garage_cat_columns].isnull().all(axis=1)
testing.loc[mask, garage_cat_columns] = 'None'