gpt4 book ai didi

python - 从切片更新多列时,df.fillna() 不起作用

转载 作者:行者123 更新时间:2023-12-04 07:25:50 25 4
gpt4 key购买 nike

fillna() 和 df 切片有问题。仍然有我的 python 训练轮,希望得到任何帮助。我在 SE 上找到了很多接近的例子,但由于条件和多列,我没有找到任何适用于这种情况的东西。
数据:
高级回归补偿:https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data
但是,不需要像我那样下拉并组合训练和测试数据,因为这个切片在garage_cat_columns 中列出的列/因子中仅包含 ~150 np.nan 行。
Id 列是 int 并且介于 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 s 像 Nonetype:
mask = testing[garage_cat_columns].isnull().all(axis=1)
testing.loc[mask, garage_cat_columns] = 'None'

关于python - 从切片更新多列时,df.fillna() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68219878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com